Как указать флаги nftw

Это мое nftw функция, она работает правильно перед указанием флагов FTW_DEPTH а также FTW_PHYS:

if (nftw(argv[1], visit, 64, FTW_DEPTH | FTW_PHYS) != 0) 
{
    perror("nftw");
}

Также я определил визит как:

int visit(const char *path, const struct stat *stat, int flags)
{
    ...
    return 0;
}

НО после компиляции выдает ошибку:

'FTW_DEPTH' необъявлено (первое использование в этой функции)

2 ответа

Попробуйте использовать #define _XOPEN_SOURCE 500, прежде чем включать ftw.h

если вы посмотрите на ftw.h, вы увидите эти строки:

      #ifdef __USE_XOPEN_EXTENDED
/* Flags for fourth argument of `nftw'.  */
enum
{
  FTW_PHYS = 1,     /* Perform physical walk, ignore symlinks.  */
  # define FTW_PHYS FTW_PHYS
  FTW_MOUNT = 2,    /* Report only files on same file system as the
           argument.  */
  # define FTW_MOUNT    FTW_MOUNT
  FTW_CHDIR = 4,    /* Change to current directory while processing it.  */
  # define FTW_CHDIR    FTW_CHDIR
  FTW_DEPTH = 8     /* Report files in directory before directory itself.*/
  # define FTW_DEPTH    FTW_DEPTH
  # ifdef __USE_GNU
  ,
  FTW_ACTIONRETVAL = 16 /* Assume callback to return FTW_* values instead of
           zero to continue and non-zero to terminate.  */
  #  define FTW_ACTIONRETVAL FTW_ACTIONRETVAL
  # endif
};

поэтому вы можете определить этот флаг, и ошибка будет устранена:

      #define __USE_XOPEN_EXTENDED 
Другие вопросы по тегам