Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C nftw使用未定义的值传递tflag_C_Linux_Unix_Nftw - Fatal编程技术网

C nftw使用未定义的值传递tflag

C nftw使用未定义的值传递tflag,c,linux,unix,nftw,C,Linux,Unix,Nftw,像这样使用nftw遍历目录时 nftw((argc < 2) ? "." : argv[1], rm, 20, FTW_DEPTH|FTW_PHYS) nftw((argc

像这样使用nftw遍历目录时

nftw((argc < 2) ? "." : argv[1], rm, 20, FTW_DEPTH|FTW_PHYS)
nftw((argc<2)?”:argv[1],rm,20,FTW_深度| FTW_物理)
当遇到目录时,nftw将值5传递给rm函数的tflag参数。h标头仅为tflag参数指定一个具有4个值(0-3)的枚举,其中ftw_D或1是目录的适当值。fpath值在所有情况下都是正确的

所以我的问题是。为什么tflag通过5而不是1,5对tflag意味着什么

编辑:


该值实际上是FTW_DP(目录,所有子目录都已被访问),它在下面的环境相关部分中定义,我没有注意到。

的POSIX规范 表示
rm
函数的标志参数应为以下参数之一:

  • FTW\u D
    对象是一个目录
  • FTW\u DNR
    对象是无法读取的目录。fn函数不得为其任何子函数调用
  • FTW\u DP
    对象是一个目录,子目录已被访问。(只有当FTW_深度标志包含在标志中时,才会出现这种情况。)
  • FTW\u F
    该对象是一个非目录文件
  • FTW\u NS
    由于缺少适当的权限,对象上的stat()函数失败。传递给fn的stat缓冲区未定义。由于任何其他原因导致stat()失败将被视为错误,nftw()将返回-1
  • FTW_SL
    对象是一个符号链接。(只有当FTW_PHYS标志包含在标志中时,才会出现这种情况。)
  • FTW\u SLN
    该对象是一个符号链接,不命名现有文件。(只有当FTW_PHYS标志未包含在标志中时,才会出现这种情况。)
由于您没有识别系统,标准也没有定义与被调用函数的flag参数相关联的数字,因此没有人能够识别
5
在您的系统上的含义。然而,有足够多的选项使得
5
作为一个值似乎并不令人难以置信


在Mac OS X(10.9.5)上,值
5
将为
FTW_SL
。在另一个基于OSF的系统上,在a中注意到值
5
表示
FTW\u DP
,从而充分证明了我的观察,即
5
表示的标志依赖于系统。

表示5是
FTW\u DP/*目录,所有子目录都已访问*/@jedwards在程序中单步执行,似乎确实如此。再次查看标题,我现在看到枚举并没有在我认为的地方结束。谢谢你指出这一点。