Предупреждение с nftw - PullRequest
       13

Предупреждение с nftw

9 голосов
/ 23 апреля 2009

Я пытаюсь использовать 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

Я проверил определение структуры и прототип обратного вызова, и некоторые примеры, это должно быть хорошо ... Что я делаю не так? (Я удалил почти все из моего кода, чтобы очистить его) ...

спасибо

Ответы [ 2 ]

9 голосов
/ 23 апреля 2009

Linux по какой-то причине все еще использует SUSv1 для этого API, где nfsw () по-прежнему считается расширением.

На странице руководства Linux включается:

#define _XOPEN_SOURCE 500
#include <ftw.h>
0 голосов
/ 23 апреля 2009

Хм. Ваш код работает для меня. Проверьте ваши пути включения, может быть? Несмотря на то, что это системный заголовок, упустить его будет довольно сложно. Или вы случайно собрали версию, в которой не было строки #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 ...

edit : Тест, описанный выше, был выполнен на Mac OS X. В (теперь удаленном) комментарии OP упоминается, что он был в Debian, для которого на странице man упоминается, что #define _XOPEN_SOURCE 500 необходимо, как указывает Джулиано.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...