警告与nftw

时间:2009-04-23 15:44:31

标签: c linux unix posix

我正在尝试使用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的定义和回调的原型,有些例子,应该没问题......我做错了什么? (我删除了几乎所有代码以清除它)...

感谢

4 个答案:

答案 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>