我正在尝试使用带有以下代码的 nftw
获取目录树中的所有 .c 文件:
static int gf(const char *path, const struct stat *st, int t, struct FTW *ftw) {
if (t != FTW_F)
return 0;
if (strcmp(ext(path), ".c") == 0)
addl(&files, dup(abspath(path)));
return 0;
}
void getfiles(char *path) {
nftw(path, gf, 255, FTW_PHYS);
}
它可以在 Linux 和 Solaris 上运行,但在 PC-BSD 上它会因为不获取任何文件而失败。我错过了什么?
最佳答案
nftw
的返回值是多少?如果它是 -1
并且 errno 是
设置为 EINVAL
很可能您超过了 OPEN_MAX
。尝试将一个较小的值作为第三个参数传递给 nftw
并确保它小于 OPEN_MAX
。
关于c - BSD 上的 nftw 有何不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8093315/