Как указать флаги 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