12

ディレクトリの下のいくつかのファイルを処理するために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

構造体の定義とコールバックのプロトタイプ、およびいくつかの例を確認しましたが、問題ないはずです...何が間違っていますか? (コードをクリアするために、ほとんどすべてのコードを削除しました)...

ありがとう

4

4 に答える 4

12

Linux では、何らかの理由で、この API に SUSv1 を使用し続けています。nftw() は依然として拡張機能と見なされています。

Linux のマニュアル ページから、インクルードは次のようにする必要があります。

#define _XOPEN_SOURCE 500
#include <ftw.h>
于 2009-04-23T16:00:07.127 に答える
1

うーん。あなたのコードは私のために働きます。インクルードパスを確認してください。これはシステム ヘッダーですが、これを見逃すのはかなり難しいはずです。それとも、行のないバージョンを誤ってコンパイルしたの#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 を使用していると述べており、Juliano が指摘しているように、man ページにはそれが必要であると記載されています。#define _XOPEN_SOURCE 500

于 2009-04-23T15:56:21.193 に答える