从文件句柄获取真实路径

时间:2014-12-22 20:00:27

标签: c posix stdio

有没有办法从文件句柄获取真实路径(即没有任何“/../”,“/./”序列,符号链接等的绝对路径?我知道POSIX有realpath()函数但是它不接受文件句柄。它使用文件名(字符串)代替。我需要一个接受由FILE*分配的stdio fopen()句柄或由open()分配的文件描述符的函数,并返回该文件的实际路径。

这样的事情存在吗?或者是否有其他方法可以从FILE*句柄或POSIX文件描述符获取完全限定的路径?

1 个答案:

答案 0 :(得分:4)

通常,文件可能有多个名称(硬链接),根本没有名称(未链接的文件),文件描述符可能连接到文件系统中未表示的内容(例如管道或套接字)

在Linux下,你可以做到

snprintf(buf, bufsize, "/proc/self/fd/%d", fd);
rc = readlink(buf, filename, filename_size);

如果readlink成功,filename是绝对路径(以斜杠/开头),则它可能包含文件名(但不一定是唯一的) fd所连接的文件 - 但它也可能包含其他内容(例如文件的名称后跟(deleted))。如果filename没有以斜线开头,那么你运气不好。

据我所知,没有可行的方式做这样的事情。