2009-04-23 35 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是必要的,因爲利亞諾指出。