2

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

另外,我只想能够statreaddir. 目前尚不清楚DIR *指向哪里,所以有没有办法从中获取目录的完整路径,DIR *或者有没有其他方法可以用来stat归档?

4

3 回答 3

4

您可以使用dirfd(), 和许多其他答案一样,然后使用readdir()call function读取每个条目fstatat()

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

我认为这个相对晦涩的功能正是您所需要的。

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

于 2012-08-14T15:18:05.963 回答
2

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

然后返回的名称readdir()成为您当前目录的本地名称,您可以直接使用stat()它们。

更新:澄清一下,这与调用不同chroot()它只是对进程当前目录的普通更改。

于 2012-08-14T14:10:34.900 回答
1

基于@unwind 答案,并且由于您使用的是 linux:

  • 调用dirfd()获取目录的文件描述符
  • 获取您的 pid 使用getpid()
  • /proc/<pid>/fd/<dirfd>使用阅读链接readlink()。它将按名称引用您的目录!
于 2012-08-14T14:26:44.083 回答