ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
因为rmdir只能删除空文件夹,而我实现的功能相当于 rm -rf path... 实现的功能:   递归删除指定文件夹的所有文件 程序说明: 1. my_rmdir(): 即为递归删除动作的自定义函数。 2. opendir(), readdir(), closedir(): 读取目录信息。 3. rmdir(): 删除空的文件夹; remove(): 删除文件或文件夹。 程序编译运行(见下图): 程序源码: ``` #include <stdio.h> #include <stdlib.h> #include <string.h> #include <errno.h> #include <sys/types.h> #include <dirent.h> #include <unistd.h> #define PATH_SIZE 4094 void my_rmdir(const char * path); /* rm -rf path: ./a.out path */ int main(int argc, char const *argv[]) { if (argc != 2) { fprintf(stdout, "argument error!\n"); return 1; } my_rmdir(argv[1]); return 0; } void my_rmdir(const char * path) { DIR *dirp; dirp = opendir(path); if (NULL == dirp) { perror(path); return; } struct dirent *entry; int ret; while (1) { entry = readdir(dirp); if (NULL == entry) { break; } // skip . & .. if (0 == strcmp(".", entry->d_name) || 0 == strcmp("..", entry->d_name)) { continue; } char buf[PATH_SIZE]; snprintf(buf, PATH_SIZE, "%s/%s", path, entry->d_name); ret = remove(buf); if (-1 == ret) { if (ENOTEMPTY == errno) { my_rmdir(buf); continue; } perror(buf); return; } fprintf(stdout, "rm file: %s\n", buf); } closedir(dirp); ret = rmdir(path); if (-1 == ret) { perror(path); return; } fprintf(stdout, "rm dir: %s\n", path); } ``` --------------------- 原文:https://blog.csdn.net/a_ran/article/details/25250583