2009-04-23 34 views
9

我试图使用nftw处理目录与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 -o kconfig_parser.c解析器)警告,我有这个警告,这个错误..

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 

我检查的结构和回调的原型的定义,以及一些例子,应该没事......我在做什么错? (我删除了几乎所有的代码清除它)...

谢谢

回答

9

由于某些原因,Linux仍然在此API中使用SUSv1,其中nfsw()仍被视为扩展。

在Linux manual page,该包括必须是:

#define _XOPEN_SOURCE 500 
#include <ftw.h> 
+0

其实,我联系到SUSv2规范应该如何nftw工作(我把这种更新到SUSv3链接)。在符合SUSv2或SUSv3的系统上,您不应该需要#define,但看起来您可能在Linux上需要它。 – 2009-04-23 16:16:55

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提到#define _XOPEN_SOURCE 500是必要的,因为利亚诺指出。