c - BSD 上的 nftw 有何不同?

标签 c unix posix bsd nftw

我正在尝试使用带有以下代码的 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/

相关文章:

c - 如何在C中检索相对于给定目录的文件路径

C++类成员函数转c函数

c - 如何从主函数调用dll文件?

c - `lseek` 如何帮助确定文件是否为空?

unix - 时间:2019-05-17 标签:c++pipe: does it wait on write

linux - 在哪里配置网络选项

将 POSIX 整数 errno 转换为编译时常量

c - ANSI C 中的字符串处理(内存分配)

c - 奇怪的代码崩溃问题?

linux - 如何在不解压缩的情况下列出 zip 存档中的文件?