我编写了一个接受DIR *
作为参数的函数,并在其中列出文件(使用readdir
函数)
此外,我只希望能够stat
返回readdir
个文件。目前还不清楚DIR *
指向哪里,有没有办法从DIR *
获取目录的完整路径,还是有其他方式可以stat
文件?
答案 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()
/proc/<pid>/fd/<dirfd>
阅读readlink()
链接。它将按名称引用您的目录!