2014-09-26 58 views
0

在使用nftw像这样,nftw传递tflag具有未定义值

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是什么意思?

编辑:

值实际上FTW_DP(目录,子目录都已经访问过),这是在我没有注意到的与环境相关的部分定义如下。

+2

[**头文件的这个版本](http://www.scs.stanford.edu/histar/src/pkg/uclibc/include/ftw.h)表示5是'FTW_DP/*目录中,所有的子目录都被访问过。* /' – jedwards 2014-09-26 14:11:32

+0

@jedwards通过程序,似乎确实如此。再次看看标题,我现在看到枚举并没有结束,我认为它确实。感谢您指出了这一点。 – 2014-09-26 14:20:11

回答

2

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似乎不合理的价值。

在Mac OS X(10.9.5)上,值5将是FTW_SL。在另一个基于OSF的系统中,jedwardscomment中的注释5的值为FTW_DP,因此完全证明我的观察结果是由5表示的标志是系统相关的。