gpt4 book ai didi

c - nftw 传递具有未定义值的 tflag

转载 作者:太空宇宙 更新时间:2023-11-04 08:36:28 26 4
gpt4 key购买 nike

像这样使用 nftw 遍历目录时,

nftw((argc < 2) ? "." : argv[1], rm, 20, FTW_DEPTH|FTW_PHYS)

nftw 在遇到目录时将值 5 传递给 rm 函数的 tflag 参数。 ftw.h header 仅为 tflag 参数指定一个具有 4 个值 (0-3) 的枚举,其中 FTW_D 或 1 是目录的适当值。 fpath 值似乎在所有情况下都是正确的。

所以我的问题是这样的。为什么它为 tflag 传递 5 而不是 1,5 对 tflag 意味着什么?

编辑:

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

最佳答案

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

  • FTW_D The object is a directory.
  • FTW_DNR The object is a directory that cannot be read. The fn function shall not be called for any of its descendants.
  • FTW_DP The object is a directory and subdirectories have been visited. (This condition shall only occur if the FTW_DEPTH flag is included in flags.)
  • FTW_F The object is a non-directory file.
  • FTW_NS The stat() function failed on the object because of lack of appropriate permission. The stat buffer passed to fn is undefined. Failure of stat() for any other reason is considered an error and nftw() shall return -1.
  • FTW_SL The object is a symbolic link. (This condition shall only occur if the FTW_PHYS flag is included in flags.)
  • FTW_SLN The object is a symbolic link that does not name an existing file. (This condition shall only occur if the FTW_PHYS flag is not included in flags.)

由于您没有识别您的系统,并且标准没有定义什么数字应该与被调用函数的标志参数相关联,所以没有人可以识别 5 在您的系统上意味着什么系统。但是,5 作为一个值似乎并不令人难以置信。

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

关于c - nftw 传递具有未定义值的 tflag,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26061399/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com