Loading... # Linux中的目录操作函数 在Linux系统编程中,目录操作是一个常见的任务。目录操作包括创建、删除、读取目录内容以及遍历目录树等。本文将详细介绍Linux中常用的目录操作函数,包括其用法和示例代码。 ## 一、创建目录 ### 1.1 `mkdir`函数 `mkdir`函数用于创建一个新目录。其原型定义在 `<sys/stat.h>`头文件中: ```c #include <sys/stat.h> #include <sys/types.h> int mkdir(const char *pathname, mode_t mode); ``` - `pathname`:要创建的目录路径。 - `mode`:新目录的权限位。 示例代码: ```c #include <sys/stat.h> #include <sys/types.h> #include <stdio.h> int main() { const char *dir = "/tmp/newdir"; mode_t mode = 0755; if (mkdir(dir, mode) == 0) { printf("Directory created successfully.\n"); } else { perror("mkdir"); } return 0; } ``` ## 二、删除目录 ### 2.1 `rmdir`函数 `rmdir`函数用于删除一个空目录。其原型定义在 `<unistd.h>`头文件中: ```c #include <unistd.h> int rmdir(const char *pathname); ``` - `pathname`:要删除的目录路径。 示例代码: ```c #include <unistd.h> #include <stdio.h> int main() { const char *dir = "/tmp/newdir"; if (rmdir(dir) == 0) { printf("Directory deleted successfully.\n"); } else { perror("rmdir"); } return 0; } ``` ## 三、读取目录内容 ### 3.1 `opendir`函数 `opendir`函数用于打开一个目录。其原型定义在 `<dirent.h>`头文件中: ```c #include <dirent.h> DIR *opendir(const char *name); ``` - `name`:要打开的目录路径。 ### 3.2 `readdir`函数 `readdir`函数用于读取目录中的下一个条目。其原型定义在 `<dirent.h>`头文件中: ```c #include <dirent.h> struct dirent *readdir(DIR *dirp); ``` - `dirp`:由 `opendir`返回的目录指针。 ### 3.3 `closedir`函数 `closedir`函数用于关闭一个目录。其原型定义在 `<dirent.h>`头文件中: ```c #include <dirent.h> int closedir(DIR *dirp); ``` - `dirp`:由 `opendir`返回的目录指针。 示例代码: ```c #include <dirent.h> #include <stdio.h> int main() { const char *dir = "/tmp"; DIR *dp; struct dirent *entry; dp = opendir(dir); if (dp == NULL) { perror("opendir"); return 1; } while ((entry = readdir(dp)) != NULL) { printf("Name: %s\n", entry->d_name); } closedir(dp); return 0; } ``` ## 四、遍历目录树 ### 4.1 `nftw`函数 `nftw`函数用于遍历目录树。其原型定义在 `<ftw.h>`头文件中: ```c #include <ftw.h> int nftw(const char *dirpath, int (*fn) (const char *fpath, const struct stat *sb, int typeflag, struct FTW *ftwbuf), int nopenfd, int flags); ``` - `dirpath`:要遍历的目录路径。 - `fn`:对每个文件调用的函数指针。 - `nopenfd`:同时打开的文件描述符的最大数量。 - `flags`:控制遍历行为的标志。 示例代码: ```c #include <ftw.h> #include <stdio.h> #include <sys/stat.h> int display_info(const char *fpath, const struct stat *sb, int typeflag, struct FTW *ftwbuf) { printf("Name: %s\n", fpath); return 0; } int main() { const char *dirpath = "/tmp"; if (nftw(dirpath, display_info, 20, 0) == -1) { perror("nftw"); return 1; } return 0; } ``` ## 五、获取和修改目录属性 ### 5.1 `stat`函数 `stat`函数用于获取文件或目录的属性。其原型定义在 `<sys/stat.h>`头文件中: ```c #include <sys/stat.h> int stat(const char *pathname, struct stat *statbuf); ``` - `pathname`:文件或目录路径。 - `statbuf`:用于存储文件属性的结构体。 ### 5.2 `chmod`函数 `chmod`函数用于修改文件或目录的权限。其原型定义在 `<sys/stat.h>`头文件中: ```c #include <sys/stat.h> int chmod(const char *pathname, mode_t mode); ``` - `pathname`:文件或目录路径。 - `mode`:新的权限位。 示例代码: ```c #include <sys/stat.h> #include <stdio.h> int main() { const char *dir = "/tmp/newdir"; struct stat statbuf; if (stat(dir, &statbuf) == 0) { printf("Permissions: %o\n", statbuf.st_mode & 0777); } else { perror("stat"); } if (chmod(dir, 0755) == 0) { printf("Permissions changed successfully.\n"); } else { perror("chmod"); } return 0; } ``` ## 六、总结 本文详细介绍了Linux系统编程中常用的目录操作函数,包括创建目录、删除目录、读取目录内容、遍历目录树以及获取和修改目录属性。这些函数是进行文件系统操作的基础,通过示例代码展示了其具体用法。希望本文能帮助您更好地理解和应用这些目录操作函数,提高系统编程的效率和能力。 最后修改:2024 年 08 月 01 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 如果觉得我的文章对你有用,请随意赞赏