来自DIR *的stat文件

时间:2012-08-14 14:07:08

标签: c linux

我编写了一个接受DIR *作为参数的函数,并在其中列出文件(使用readdir函数)

此外,我只希望能够stat返回readdir个文件。目前还不清楚DIR *指向哪里,有没有办法从DIR *获取目录的完整路径,还是有其他方式可以stat文件?

3 个答案:

答案 0 :(得分:4)

您可以使用dirfd()和其他许多答案,然后使用readdir()调用函数fstatat()阅读每个条目:

int fstatat(int dirfd, const char *pathname, struct stat *buf, int flags);

我认为这个相对模糊的功能正是你所需要的。

或者,您可以调用openat()传递目录的fd和从目录中读取的路径名。然后执行fstat()以获取文件统计信息。

答案 1 :(得分:2)

我不这么认为,但您应该能够使用dirfd()来获取与DIR *对应的文件描述符,并使用它可以调用fchdir()来更改为那个目录。

然后readdir()返回的名称将成为您当前目录的本地名称,您可以直接stat()这些名称。

更新:只是为了澄清,这与与调用chroot()相同,它只是进程'当前目录的普通更改。< / p>

答案 2 :(得分:1)

基于@unwind的答案,因为你在linux中:

  • 调用dirfd()以获取目录的文件描述符
  • 使用getpid()
  • 获取您的pid
  • 使用/proc/<pid>/fd/<dirfd>阅读readlink()链接。它将按名称引用您的目录!