使用像这样的nftw遍历目录时,
nftw((argc < 2) ? "." : argv[1], rm, 20, FTW_DEPTH|FTW_PHYS)
当遇到目录时,nftw将值5传递给rm函数的tflag参数。 ftw.h标头仅为tflag参数指定具有4个值(0-3)的枚举,其中FTW_D或1是目录的适当值。在所有情况下,fpath值似乎都是正确的。
所以我的问题是这个。为什么tflag传递5而不是1,而tflag的5是什么意思?
编辑:
该值实际上是FTW_DP(目录,已访问过所有子目录),这在下面的环境相关部分中定义,我没有注意到。
答案 0 :(得分:2)
nftw()
的POSIX规范
说你的rm
函数的flag参数应该是:
FTW_D
该对象是一个目录。FTW_DNR
该对象是无法读取的目录。不应为其任何后代调用fn函数。FTW_DP
该对象是一个目录,并且已访问过子目录。 (只有在标志中包含FTW_DEPTH标志时才会出现此情况。)FTW_F
该对象是一个非目录文件。FTW_NS
由于缺少适当的权限,stat()函数在对象上失败。传递给fn的stat缓冲区未定义。 stat()因任何其他原因而失败被视为错误,nftw()将返回-1。FTW_SL
该对象是一个符号链接。 (只有在标志中包含FTW_PHYS标志时才会出现此情况。)FTW_SLN
该对象是一个不命名现有文件的符号链接。 (只有在标志中不包含FTW_PHYS标志时才会出现这种情况。)
由于您没有识别您的系统,并且标准没有定义与被调用函数的flag参数相关联的数字,因此没有人可以识别5
对...的意义你的系统。但是,5
有足够的选项似乎不可能作为一个值。
在Mac OS X(10.9.5)上,值5
为FTW_SL
。在另一个系统上,基于OSF,jedwards中的comment注释5
的值为FTW_DP
,从而完全证明了我的观察结果{{1是系统相关的。