五、應用經驗
六、課後作業
目錄的操作不論是在嵌入式還是應用軟體程式設計都是必不可少的,不同的開發語言可能略有不同,本章節主要是討論在linux系統下目錄的一系列操作,以我的個人經驗,建立目錄和列出目錄中的檔案這兩個功能用得最多。
在shell中我們可以直接輸入命令pwd來顯示當前的工作目錄,在c程式中呼叫getcwd函式可以獲取當前的工作目錄。函式宣告:
char
*getcwd
(char
* buf,size_t size)
;
getcwd函式把當前工作目錄存入buf中,如果目錄名超出了引數size長度,函式返回null,如果成功,返回buf。例如:
char strpwd[
301]
;memset
(strpwd,0,
sizeof
(strpwd)
)getcwd
(strpwd,
300)
;printf
("當前目錄是:%s\n"
,strpwd)
;
函式宣告:
int
chdir
(const
char
*path)
;
就像我們在shell中使用cd命令切換目錄一樣,在c程式中使用chdir函式來改變工作目錄。
返回值:0-切換成功;非0-失敗。
在shell中可以通過mkdir/rmdir命令來建立/刪除目錄,c程式中用mkdir/rmdir函式來建立/刪除目錄。
建立目錄函式的宣告:
int
mkdir
(const
char
*pathname, mode_t mode)
;
mode的含義將按open系統呼叫的o_creat選項中的有關定義設定,當然,它還要服從umask的設定況,是不是看不明白?那先固定填0755,注意,0不要省略哦,它表示八進位制。 例如:
mkdir
("/tmp/aaa"
,0755);
// 建立/tmp/aaa目錄
刪除目錄函式的宣告:
int
rmdir
(const
char
*pathname)
;
在實際開發中,檔案是存放在目錄中的,在處理檔案之前,必須先知道目錄中有哪些檔案,所以要獲取目錄中的檔案列表。涉及到的庫函式如下:
#include
開啟目錄的函式opendir的宣告:
dir *
opendir
(const
char
*pathname)
;
讀取目錄的函式readdir的宣告:
struct dirent *
readdir
(dir *dirp)
;
關閉目錄的函式closedir的宣告:
int
closedir
(dir *dirp)
;
1)目錄指標dir
dir *目錄指標名;
2)struct dirent結構體
每呼叫一次readdir函式會返回乙個struct dirent的位址,存放了本次讀取到的內容,它的原理與fgets函式讀取檔案相同。
struct dirent
;
我們只需要關注結構體的d_type和d_name成員,其它的不必關心。
d_name檔名或目錄名。
d_type描述了檔案的型別,有多種取值,最重要的是8和4,8-常規檔案(a regular file);4-目錄(a directory),其它的暫時不關心。
示例(book123.cpp)
/*
* 程式名:book123.c,此程式用於演示讀取目錄下的檔名資訊
*/#include
#include
intmain
(int argc,
char
*ar**)
dir *dir;
// 定義目錄指標
// 開啟/tmp目錄if(
(dir=
opendir
(ar**[1]
))==0
)return-1
;// 用於存放從目錄中讀取到的檔案和目錄資訊
struct dirent *stdinfo;
while(1
)closedir
(dir)
;// 關閉目錄指標
}
執行效果
在實際開發中,對目錄的操作並不會像book123.c那樣簡單。
實際需求是這樣的,檔案存放在某目錄中,該目錄下還會有多級子目錄,程式設計師想要的是列出該目錄及其子目錄下全部的檔名。
例如存在/home/wucz/tmp目錄,其子目錄結構和檔案如下:
示例(book124.c)
/*
* 程式名:book124.c,此程式用於演示讀取目錄及其子目錄下全部的檔案資訊
*/#include
#include
// 列出目錄及子目錄下的檔案
intreaddir
(const
char
*strpathname)
;int
main
(int argc,
char
*ar**)
// 列出目錄及子目錄下的檔案
readdir
(ar**[1]
);}// 列出目錄及子目錄下的檔案
intreaddir
(const
char
*strpathname)
}closedir
(dir)
;// 關閉目錄指標
}
執行效果
這才是程式設計師想要的結果。
在某些c語言的教材裡,有遞迴函式這個概念,在我的教程裡,沒有講這個概念,實際上,book124.c的readdir函式就是乙個遞迴函式,在readdir函式中呼叫了自身。
編寫示例程式,把本章節介紹的知識點全部演示一遍,用程式演示可以加深您的理解和映象。
C語言目錄操作
1.在linux下要判斷乙個路徑是否是目錄,及遍歷這個路徑下的所有檔案,可以使用以下方式 主演使用的函式是 s isdir 判斷是否是目錄,傳入引數是stat.st mode dir opendir const char 開啟指定路徑 struct dirent readdir dir 開啟指定目錄...
C語言目錄操作
五 應用經驗 六 課後作業 目錄的操作不論是在嵌入式還是應用軟體程式設計都是必不可少的,不同的開發語言可能略有不同,本章節主要是討論在linux系統下目錄的一系列操作,以我的個人經驗,建立目錄和列出目錄中的檔案這兩個功能用得最多。在shell中我們可以直接輸入命令pwd來顯示當前的工作目錄,在c程式...
C語言目錄操作
五 應用經驗 六 課後作業 目錄的操作不論是在嵌入式還是應用軟體程式設計都是必不可少的,不同的開發語言可能略有不同,本章節主要是討論在linux系統下目錄的一系列操作,以我的個人經驗,建立目錄和列出目錄中的檔案這兩個功能用得最多。在shell中我們可以直接輸入命令pwd來顯示當前的工作目錄,在c程式...