在使用nftw遍历目录时,
nftw((argc < 2) ? "." : argv[1], rm, 20, FTW_DEPTH|FTW_PHYS)nftw在遇到目录时将值5传递给rm函数的tflag参数。H标头只为t频参数指定4个值(0-3)的枚举,其中FTW_D或1是目录的适当值。在所有情况下,fpath值似乎都是正确的。
所以我的问题是这个。为什么它传递的是5而不是1,而5对于t频来说意味着什么呢?
编辑:
这个值实际上是FTW_DP (目录,所有子目录都已被访问过),它在下面的环境依赖部分中定义,我没有注意到。
发布于 2014-09-26 14:07:32
nftw()的POSIX规范指出,rm函数的标志参数应为:
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标志不包含在标志中时,才会出现此情况。)由于您没有标识您的系统,而且标准也没有定义与被调用函数的标志参数相关联的数字,所以没有人能够识别5在您的系统中的含义。然而,有足够的选项使5作为一个值似乎不可信。
在Mac (10.9.5)上,值5为FTW_SL。在另一个系统上,基于OSF,jedwards在comment中指出5值是FTW_DP的值,因此完全有理由观察到5表示的标志是系统依赖的。
https://stackoverflow.com/questions/26061399
复制相似问题