从文件描述符或FILE *中获取路径?

4

有没有办法从文件描述符或FILE指针中检索路径信息?

我知道在文件描述符是套接字、管道等情况下,这些数据可能并不总是相关/有用的。

3个回答

4
如果你很幸运地使用的是Mac OS X系统,你可以使用下面的代码:
#define _DARWIN_C_SOURCE
#include <sys/fcntl.h>
.
.
.
char pathbuf[PATH_MAX];
if (fcntl(fd, F_GETPATH, pathbuf) >= 0) {
    // pathbuf now contains *a* path to the open file descriptor
}

请注意,返回的路径未必是用于打开文件的路径...如果存在硬链接,特别是,您获得的路径将是一个有效的文件路径。

4

我不相信有任何通用的方法,但是例如在Linux上,您可以调用readlink函数,传入"/proc/self/fd/fileno"作为参数,如果内核能够提供路径,则会返回路径,否则会返回各种看起来很奇怪的字符串。


很酷,但不要将其与readlink() C函数混淆,后者读取符号链接末尾文件的内容。 - Don Wakefield
看起来我可以在扫描文件系统时打开文件并比较索引节点。当然,这样做是绝对错误的,正如学习者所提到的,无法知道遇到的第一个文件可能是众多硬链接中的一个。我怀疑更简单、更有效的方法是只需将初始路径变量外部化。 - tapi
@Don:这是readlink() C函数,它读取符号链接目标的名称,而不是内容。 - hobbs
readlink()函数适用于符号链接:它以路径名的形式提供链接的目标。 - dmckee --- ex-moderator kitten
我的错。我不知道我在想什么API。 - Don Wakefield

-1

一个文件可以有一个或多个名称,因此没有标准方法。 我不确定是否有操作系统特定的内容。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接