简体   繁体   中英

Warning with nftw

I'm trying to use the nftw to process some files under a directory

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

}

When I'm compiling (gcc kconfig_parser.c -o parser) , I've got this warning and this error..

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

I've checked the definition of the struct and the prototype of the callback, and some examples, it should be fine... What am I doing wrong ? (I've removed almost everything of my code to clear it)...

thanks

Linux, for some reason, still uses SUSv1 for this API, where nftw() is still considered an extension.

From the Linux manual page , the include has to be:

#define _XOPEN_SOURCE 500
#include <ftw.h>

Hmm. Your code works for me. Check your include paths, maybe? Though this is a system header, so it should be pretty hard to miss this. Or were you accidentally compiling a version that didn't have the #include <ftw.h> line?

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

edit : The test above was done on Mac OS X. In a (now deleted) comment the OP mentioned he was on Debian, for which the man page mentions that #define _XOPEN_SOURCE 500 is necessary, as Juliano points out.

On a CentOs versions the header file didn't use "#define _XOPEN_SOURCE 500" i had to do this below,

#define __USE_XOPEN_EXTENDED 1
#include <ftw.h>

在 Ubuntu 18.04 上,这似乎是现在可行的(类似于 JohnMeg 提到的 CentOS)。

#define __USE_XOPEN_EXTENDED 1 #include <ftw.h>

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM