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 上它会因不拾取任何文件而失败。我缺少什么?
I'm trying to get all .c files in a directory tree using nftw
with the following code:
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);
}
It works on Linux and Solaris, but on PC-BSD it fails by simply not picking up any files. What am I missing?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
nftw
的返回值是多少?如果为-1
并且errno
设置为EINVAL
,则很可能超出了OPEN_MAX
的值>。尝试将较小的值作为第三个参数传递给nftw
并确保它小于OPEN_MAX
。What is the return value of
nftw
? If it's-1
and theerrno is
set toEINVAL
it's quite likely that you're exceeding the value ofOPEN_MAX
. Try passing a smaller value as third parameter tonftw
and ensure it's smaller thanOPEN_MAX
.