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

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

23.04.2009 07:44:31 Просмотров 28 Источник

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

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

спасибо

У вопроса есть решение - Посмотреть?

Ответы - Предупреждение с nftw / Warning with nftw

Brian Campbell

23.04.2009 07:56:21

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

Является ответом!
Juliano

23.04.2009 08:00:07

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

На странице руководства Linux , include должен быть:

#define _XOPEN_SOURCE 500
#include <ftw.h>
https://stackoverflow.com/questions/782338/warning-with-nftw/782407#comment592869_782407
На самом деле, я связался со спецификацией SUSv2 для того, как nftw должен работать (которую я с тех пор обновил до ссылки SUSv3). В системе, совместимой с SUSv2 или SUSv3, вам не нужно это #define, но похоже, что это может понадобиться в Linux.
https://stackoverflow.com/questions/782338/warning-with-nftw/782407#comment592973_782407
Брайан: на самом деле, вы правы. В нижней части новой страницы руководства вы можете прочитать: "выпуск 5: перенесено из X / OPEN Unix extension в BASE.". Таким образом, первоначально это было расширение X/OPEN, а затем переехало на базу. По какой-то причине Linux все еще использует SUSv1 этого API.
https://stackoverflow.com/questions/782338/warning-with-nftw/782407#comment9966777_782407
Просто обратите внимание: #define должен быть перед включением первого заголовка, Даже несвязанных.
JohnMeg

24.01.2020 06:00:04

На версиях CentOs заголовочный файл не использовал "#define _XOPEN_SOURCE 500" я должен был сделать это ниже,

#define __USE_XOPEN_EXTENDED 1
#include <ftw.h>
Dhilipkr

08.02.2020 12:56:32

В Ubuntu 18.04 это то, что, кажется, работает сейчас (подобно CentOS, как упоминал Джонмег).

#define __USE_XOPEN_EXTENDED 1 #include <ftw.h>

https://stackoverflow.com/questions/782338/warning-with-nftw/60121623#comment106335636_60121623
Это скорее комментарий, чем ответ.
Закрыть X