C nftw使用未定义的值传递tflag
像这样使用nftw遍历目录时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((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
对象是无法读取的目录。fn函数不得为其任何子函数调用FTW\u DNR
对象是一个目录,子目录已被访问。(只有当FTW_深度标志包含在标志中时,才会出现这种情况。)FTW\u DP
该对象是一个非目录文件FTW\u F
由于缺少适当的权限,对象上的stat()函数失败。传递给fn的stat缓冲区未定义。由于任何其他原因导致stat()失败将被视为错误,nftw()将返回-1FTW\u NS
对象是一个符号链接。(只有当FTW_PHYS标志包含在标志中时,才会出现这种情况。)FTW_SL
该对象是一个符号链接,不命名现有文件。(只有当FTW_PHYS标志未包含在标志中时,才会出现这种情况。)FTW\u SLN
5
在您的系统上的含义。然而,有足够多的选项使得5
作为一个值似乎并不令人难以置信
在Mac OS X(10.9.5)上,值
5
将为FTW_SL
。在另一个基于OSF的系统上,在a中注意到值5
表示FTW\u DP
,从而充分证明了我的观察,即5
表示的标志依赖于系统。表示5是FTW\u DP/*目录,所有子目录都已访问*/代码>@jedwards在程序中单步执行,似乎确实如此。再次查看标题,我现在看到枚举并没有在我认为的地方结束。谢谢你指出这一点。