【发布时间】:2017-10-17 15:17:55
【问题描述】:
我正在尝试递归遍历一个目录并打印出所有文件。
当我尝试使用下面的代码执行此操作时,例如,我使用 sprint(".", ".") 调用该函数,我得到一堆点的输出。
当我减少允许的打开进程数量 (ulimit -n 20) 时,我得到 17 个点。不过我不明白,因为我认为 readdir() 和 opendir() 不会创建新进程。这是我的代码:
void sprint(char *filename, char * dirToOpen) {
DIR *directory = opendir(dirToOpen);
struct dirent *entry;
struct stat s;
char pathname[1024];
if (directory) { /*if it's a directory*/
while ((entry = readdir(directory)) != NULL) { /*while there are more entries to read*/
if(strcmp(entry->d_name, filename) == 0) /*if entry name corresponds to filename, print it*/
printf("%s\n", filename);
sprintf(pathname, "./%s", entry->d_name); /*makes pathname*/
if (lstat(pathname, &s) == 0 && S_ISDIR(s.st_mode)) { /*if the file is a directory*/
if(strcmp(entry->d_name, "..") != 0 && strcmp(entry->d_name, ".") != 0) /*if the directory isn't . or ..*/
sprint(filename, entry->d_name);
}
}
closedir(directory);
}
}
此外,它不会到达其余文件,因为它只打印点,而不是完整的文件名。我认为它在我最后一个 if 循环中的某个地方,但我不确定。
【问题讨论】:
-
我假设这是一个 POSIX 系统(Linux / BSD)?你考虑过the
nftwfunction吗?
标签: c unix recursion directory