Linux下檔案操作

2021-05-23 21:57:55 字數 3616 閱讀 7257

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標準的一部分,在所...