我正在尝试使用nftw来处理目录下的一些文件
#include <ftw.h> #include <stdio.h> int wrapper(const char * fpath, const struct stat *sb, int typeflag, struct FTW *ftwbuf) { printf("File %d\n", ftwbuf->base); return(0); } int main(int argc, char ** argv) { const char *name; int flags = 0; name = argv[1]; nftw(name, wrapper, 20, flags); return 0; }
当我正在编译(gcc kconfig_parser.c -oparsing器),我有这个警告和这个错误..
kconfig_parser.c:5: warning: 'struct FTW' declared inside parameter list kconfig_parser.c:5: warning: its scope is only this definition or declaration, which is probably not what you want kconfig_parser.c: In function 'wrapper': kconfig_parser.c:6: error: dereferencing pointer to incomplete type
我已经检查了结构的定义和callback的原型,以及一些例子,应该没问题…我做错了什么? (我已经删除了几乎所有的代码清除它)…
谢谢
由于某些原因,Linux仍然使用SUSv1作为这个API,其中nfsw()仍然被认为是一个扩展。
在Linux 手册页面 ,包含必须是:
#define _XOPEN_SOURCE 500 #include <ftw.h>
嗯。 你的代码适合我。 检查你的包含路径,也许? 虽然这是一个系统标题,所以它应该很难错过这个。 或者你是不小心编译了一个没有#include <ftw.h>
行的版本?
$ gcc -o ftw ftw.c $ ./ftw my-directory File 10 File 11 File 16 File 16 File 16 File 16 File 16 ... etc ...
编辑 :上面的测试是在Mac OS X上完成的。在一个(现在删除的)注释中,OP提到他在Debian上,正如Juliano指出的, 手册页提到#define _XOPEN_SOURCE 500
是必要的。