opendir(打開目錄)
相關函數 | open,readdir,closedir,rewinddir,seekdir,telldir,scandir |
表頭文件 | #include<sys/types.h> #include<dirent.h> |
定義函數 | DIR * opendir(const char * name); |
函數說明 | opendir()用來打開參數name指定的目錄,並返回DIR*形態的目錄流,和open()類似,接下來對目錄的讀取和搜索都要使用此返回值。 |
返回值 | 成功則返回DIR* 型態的目錄流,打開失敗則返回NULL。 |
錯誤代碼 | EACCESS 權限不足 EMFILE 已達到進程可同時打開的文件數上限。 ENFILE 已達到系統可同時打開的文件數上限。 ENOTDIR 參數name非真正的目錄 ENOENT 參數name 指定的目錄不存在,或是參數name 為一空字符串。 ENOMEM 核心內存不足。 |
readdir(讀取目錄) |
相關函數 | open,opendir,closedir,rewinddir,seekdir,telldir,scandir |
表頭文件 | #include<sys/types.h> #include<dirent.h> |
定義函數 | struct dirent * readdir(DIR * dir); |
函數說明 | readdir()返回參數dir目錄流的下個目錄進入點。 結構dirent定義如下 struct dirent { ino_t d_ino; ff_t d_off; signed short int d_reclen; unsigned char d_type; har d_name[256; }; d_ino 此目錄進入點的inode d_off 目錄文件開頭至此目錄進入點的位移 d_reclen _name的長度,不包含NULL字符 d_type d_name 所指的文件類型 d_name 文件名 |
返回值 | 成功則返回下個目錄進入點。有錯誤發生或讀取到目錄文件尾則返回NULL。 |
附加說明 | EBADF參數dir為無效的目錄流。 |
closedir(關閉目錄)
相關函數 | opendir |
表頭文件 | #include<sys/types.h> #include<dirent.h> |
定義函數 | int closedir(DIR *dir); |
函數說明 | closedir()關閉參數dir所指的目錄流。 |
返回值 | 關閉成功則返回0,失敗返回-1,錯誤原因存於errno 中。 |
錯誤代碼 | EBADF 參數dir為無效的目錄流 |
范例 | 參考readir()。 |
下面我們開發一個小程序,這個程序有一個參數.如果這個參數是一個文件名,我們輸出這
個文件的大小和最后修改的時間,如果是一個目錄我們輸出這個目錄下所有文件的大小和
修改時間.
點擊(此處)折疊或打開
- #include <unistd.h>
- #include <stdio.h>
- #include <errno.h>
- #include <sys/types.h>
- #include <sys/stat.h>
- #include <dirent.h>
- #include <time.h>
- static int get_file_size_time(const char *filename) {
- struct stat statbuf;
- if (stat(filename, &statbuf) == -1) {
- printf("Get stat on %s Error:%s\n",
- filename, strerror(errno));
- return (-1);
- }
- if (S_ISDIR(statbuf.st_mode))return (1);
- if (S_ISREG(statbuf.st_mode))
- printf("%s size:%ld bytes\tmodified at %s",
- filename, statbuf.st_size, ctime(&statbuf.st_mtime));
- return (0);
- }
- int main(int argc, char **argv) {
- DIR *dirp;
- struct dirent *direntp;
- int stats;
- char buf[80];
- if (argc != 2) {
- printf("Usage:%s filename\n\a", argv[0]);
- exit(1);
- }
- if (((stats = get_file_size_time(argv[1])) == 0) || (stats == -1))exit(1);
- if ((dirp = opendir(argv[1])) == NULL) {
- printf("Open Directory %s Error:%s\n",
- argv[1], strerror(errno));
- exit(1);
- }
- while ((direntp = readdir(dirp)) != NULL){
- sprintf(buf,"%s/%s",argv[1],direntp->d_name);
- if (get_file_size_time(buf) == -1)break;
- }
- closedir(dirp);
- exit(1);
- }
int _access(const char *pathname, int mode);位於<io.h>中
pathname 為文件路徑或目錄路徑 mode 為訪問權限
如果文件具有指定的訪問權限,則函數返回0;如果文件不存在或者不能訪問指定的權限,則返回-1.
mode的值和含義如下所示:
00——只檢查文件是否存在
02——寫權限
04——讀權限
06——讀寫權限