1. linux下檔案操作的途徑
(1)通過底層檔案系統來實現,要求熟悉底層檔案系統的結構,並且編寫大量**來完成
(2)通過呼叫shell來完成,訪問shell介面,但shell返回的資訊不便於程式的分析
(3)通過系統呼叫來實現,能夠完成相應的功能,並且返回足夠的資訊
2. linux下檔案操作的方式
(1)建立檔案或目錄
mkdir(const char* dir_path,umask);//傳入的引數為路徑和掩碼,建立乙個目錄,建立成功則返回0,建立失敗則返回-1
creat(const char* f_path,umask);//建立檔案,建立成功則返回0,否則返回-1
open(const char* f_path,主標誌,umask);//返回乙個檔案識別符號,建立成功則返回0,否則返回-1
(2)顯示檔案或目錄資訊
fstat(int f,struct stat *buf)//第乙個引數是檔案描述符,第二個引數是buf指向的stat結構體指標,返回檔案屬性或狀態資訊,儲存到buf指向的stat結構體指標中去
stat(const char* f_path,struct stat* buf);//第乙個引數是檔案路徑指標變數,第二個引數是buf所指向的stat結構體變數
lstat(const char* f_path,struct stat* buf);//同上
三者區別: stat,lstat可以在檔案不開啟的情況下返回檔案的屬性或狀態資訊,而fstat必須在檔案開啟的情況下返回檔案的狀態或屬性資訊
如果是符號鏈結,如軟鏈結,那麼stat返回的是原來檔案的屬性或狀態資訊,而lstat返回的是符號鏈結的狀態與屬性
chdir(const char* dir_path);//切換到相應目錄
chmod(const char* f_path,umask);//修改檔案訪問許可權
dir *opendir(const char* name);//返回乙個指向dir結構體的子目錄流指標
struct dirent *readdir(dir *dirp);//返回指向子目錄流結構體中的下乙個目錄相關資訊的結構體指標
closedir(dir *dirp);//關閉子目錄流
對目錄的遍歷首先返回子目錄流指標,然後找子目錄流的下乙個目錄資訊,如果是下乙個目錄還是目錄,輸出目錄名,則找它的子目錄流指標,否則,列印檔案名
(3)刪除檔案或目錄資訊
rmdir(const char* name);//檔案路徑,刪除目錄
unlink(const char* f_path);//刪除檔案
注意當目錄中含有子目錄時,不能刪除,即rmdir在目錄沒有子目錄的情況下才能執行成功
程式例項:
#include
#include
#include
#include
#include
#include
#include
#include
int creat_dir(const char* dir_path,mode_t attrib);
int creat_file(const char* f_path,mode_t attrib);
void scan_dir(const char* dir);
void delete(const char* dir);//刪除建立的testdir目錄
int main()
else
close(f);
chdir(fdir_path);//切換到testdir目錄中建立子目錄
f=creat_dir("subdir",attrib);//建立子目錄subdir
if(f==-1)
else
close(f);
f=creat_file("file",attrib);
if(f==-1)
else
close(f);
chdir("subdir");//進入subdir子目錄中
f=creat_file("file1",attrib);
if(f==-1)
else
close(f);
chdir("..");
chdir("..");//切換到c語言程式設計目錄
//下面顯示testdir的屬性或狀態資訊
struct stat buf1;
stat(fdir_path,&buf1);
if(buf1.st_mode&s_irusr)
chmod(fdir_path,0771);
//遍歷testdir下的所有檔案和目錄
scan_dir(".");//.代表當前目錄,..代表上一層目錄
chdir("/home/c語言程式設計");
//刪除testdir檔案操作
delete("testdir");
rmdir("testdir");
return 0;
}//建立目錄
int creat_dir(const char* dir_path,mode_t attrib)
//建立檔案
int creat_file(const char* file_path,mode_t attrib)
//遍歷檔案或目錄
void scan_dir(const char* dir)
chdir(dir);
while((entry=(readdir(dp)))!=null)
printf("%s/n",entry->d_name);//列印出目錄名
scan_dir(entry->d_name);
}else
}closedir(dp);
chdir("..");//退回上一層目錄
}void delete(const char* dir)
chdir(dir);
while((entry=readdir(dp))!=null)
delete(entry->d_name);//如果不是空目錄,遞迴的呼叫d_name
rmdir(entry->d_name);
}else
}closedir(dp);
chdir("..");
}此程式首先建立了testdir這個目錄,並且建立了子目錄subdir和子檔案file,在subdir子目錄中又建立了檔案file1.
然後呼叫函式scan_dir顯示了testdir下面的所有目錄和檔案。
最後呼叫delete方法刪除testdir目錄和目錄下的所有子目錄和檔案。
幾個重要的結構體:
stat結構體儲存檔案屬性或狀態資訊
struct stat
;dirent結構體:
struct dirent
dir結構體:
typedef struct dir;
dir稱為目錄流指標,dirent稱為目錄流實體.
操作檔案的流程如下: 返回目錄流指標->返回這個目錄流指標指向的下乙個目錄實體->關閉目錄流指標
opendir(const char* f_path)->readdir(dir *dp)->closedir(dir *dp);
以上是簡單檔案操作的例子,至此,我們就可以模擬linux下的ls和rm命令。
Linux 下檔案操作
include include include include include include include include include define s 100 void treedisplay void treecreat void filecreatopen void fileread ...
Linux下檔案操作
1.linux下檔案操作的途徑 1 通過底層檔案系統來實現,要求熟悉底層檔案系統的結構,並且編寫大量 來完成 2 通過呼叫shell來完成,訪問shell介面,但shell返回的資訊不便於程式的分析 3 通過系統呼叫來實現,能夠完成相應的功能,並且返回足夠的資訊 2.linux下檔案操作的方式 1 ...
linux下檔案操作
fopen fclose fwrite fread 下文簡稱 前者 與open close write read 下文簡稱 後者 的區別和各自的使用 區別 1.前者是c標準i o庫函式,後者位於c標準庫的i o緩衝區的底層稱為無緩衝i o 2.前者是c標準的一部分,而後者是unix標準的一部分,在所...