我正在尝试使用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解析器)时,我得到了这个警告和这个错误..
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我已经检查了结构的定义和回调的原型,一些例子,它应该是好的…我做错了什么?(我已经删除了几乎所有的代码来清除它)...
谢谢
发布于 2009-04-23 16:00:07
出于某些原因,Linux仍然使用SUSv1来实现这个API,nftw()仍然被认为是一个扩展。
在Linux manual page中,必须包含以下内容:
#define _XOPEN_SOURCE 500
#include <ftw.h>发布于 2009-04-23 15:56:21
嗯。你的代码很适合我。也许可以检查一下您的包含路径?虽然这是一个系统头文件,但是很难错过它。或者你是不小心编译了一个没有#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上完成的。在一个(现在被删除的)评论中,OP提到了他在Debian上,the man page提到#define _XOPEN_SOURCE 500是必要的,正如Juliano指出的那样。
发布于 2020-01-24 11:00:05
在CentOs版本中,头文件没有使用"#define _XOPEN_SOURCE 500“,我必须在下面这样做,
#define __USE_XOPEN_EXTENDED 1
#include <ftw.h>https://stackoverflow.com/questions/782338
复制相似问题