我正在使用 opendir / readdir / closedir 来重现类似于 ls 的程序,它运行得非常好,直到我尝试使用 ls "/dev/" 当涉及到带有递归选项的 "/dev/fd/" 时,它找到了更多比实际存在的文件,那些不是隐藏文件(我的意思是“。”开始文件)。真正的 ls 给我:"/dev/fd/ :" "0 1 2 3" 我的也是。但是,问题是在 gdb 中,它又找到了 3 个文件,分别是 4,5 和 6。我听说 gdb 创建了自己的环境,所以让我们忘记这一点。当我尝试 ls "/dev/fd/" -R 时,真正的 ls 会立即停止列表,而我的程序给出:
“/dev/fd/3:”
“/dev/fd/3/3/”
“/dev/fd/3/3/......../10”
stat 至少在 40 个文件后返回 -1,但执行继续:分段错误。
在我的计算机中,“/dev/fd/3/”和符号链接也是如此,宏“S_ISDIR”在现有文件上返回 0,但在不存在的文件上返回 0,例如:“/dev/fd/6/”它返回1...
我想知道为什么我的程序出错而真正的 ls 没有,我注意到 ls 在我的计算机中使用 stat64,但是当我这样做时仍然出错.. 它还使用 fstat64、futex 和其他我不使用的系统调用知道。
我可以向您展示一些我的代码示例或更多细节,这真的很难为我解释,我很抱歉。
谢谢。
PS:我在 readdir 联机帮助页中没有得到该语句:“readdir 返回的数据可能会被后续对同一目录流的 readdir 调用覆盖”