我正在尝试使用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 -o parser)时,我收到了此警告并出现此错误..
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
我已经检查过struct的定义和回调的原型,有些例子,应该没问题......我做错了什么? (我删除了几乎所有代码以清除它)...
感谢
答案 0 :(得分:9)
由于某些原因,Linux仍然在此API中使用SUSv1,其中nfsw()仍被视为扩展。
从Linux manual page开始,include必须是:
#define _XOPEN_SOURCE 500
#include <ftw.h>
答案 1 :(得分:0)
嗯。你的代码适合我。检查你的包含路径,也许?虽然这是一个系统头,但是很难错过这个。或者您是否意外编译了没有#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上,the man page提及{{1}正如朱利亚诺指出的那样,这是必要的。
答案 2 :(得分:0)
在CentOs版本上,头文件未使用“ #define _XOPEN_SOURCE 500” 我必须在下面这样做,
#define __USE_XOPEN_EXTENDED 1
#include <ftw.h>
答案 3 :(得分:0)
在Ubuntu 18.04上,这似乎可以正常工作(类似于JohnMeg提到的CentOS)。
#define __USE_XOPEN_EXTENDED 1
#include <ftw.h>