nftw

2009-04-23 6 views
9

Ben (gcc kconfig_parser.c -o ayrıştırıcı) derleme yaparken bir dizinnftw

#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; 

} 

altında bazı dosyaları işlemek için nftw kullanmaya çalışıyorum Uyarısı, ben bu uyarıyı var ve Bu hata ..

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 

Ben yapı ve geri arama prototip tanımını kontrol ettik ve bazı örnekler, sorun olmaması gerek ... Neyi yanlış yapıyorum? ...

sayesinde

cevap

9

Linux, bir nedenden ötürü, hala bu API için SUSv1 kullanır, burada nfsw() hala bir uzantı olarak kabul edilir.

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

Aslında çalışmak gerekiyordu nasıl nftw için SUSv2 şartnamesine bağlı (SUSv3 linke güncellendi beri var olan): include Linux manual page itibaren

, olmak zorunda. SUSv2 veya SUSv3 uyumlu bir sistemde, #define gerek duymamalısınız, ancak Linux'ta ihtiyacınız olabilir. –

+0

harika ... işe yarıyor ... Bunu bilmiyordum ... teşekkürler – LB40

+0

Brian: Aslında haklısın. Yeni el kitabının alt kısmında aşağıdakileri okuyabilirsiniz: "Sorun 5: X/OPEN UNIX uzantısından BASE'a taşındı." Yani, başlangıçta bir X/OPEN uzantısıydı, sonra üsse taşındı. Nedense, Linux hala bu API'nin SUSv1'ini kullanıyor. – Juliano

0

Hmm (benim kod bunu temizlemek için neredeyse herşeyi kaldırdık). Kodun benim için çalışıyor. Dahil etme yollarını kontrol et, belki? Bu bir sistem başlığı olsa da, bunu kaçırmak çok zor olmalı. Ya da yanlışlıkla #include <ftw.h> hattına sahip olmayan bir sürümü mi derlediniz?

$ gcc -o ftw ftw.c 
$ ./ftw my-directory 
File 10 
File 11 
File 16 
File 16 
File 16 
File 16 
File 16 
... etc ... 

düzenlemek: test olarak, Mac OS X'te yapıldığını yukarıda (şimdi silinmiş) OP o the man page Juliano işaret ettiği gibi #define _XOPEN_SOURCE 500, gerekli olduğunu bahseder hangi Debian üzerinde olduğunu belirtmiş yorum yapın.