有没有办法从文件句柄获取真实路径(即没有任何“/../
”,“/./
”序列,符号链接等的绝对路径?我知道POSIX有realpath()
函数但是它不接受文件句柄。它使用文件名(字符串)代替。我需要一个接受由FILE*
分配的stdio fopen()
句柄或由open()
分配的文件描述符的函数,并返回该文件的实际路径。
这样的事情存在吗?或者是否有其他方法可以从FILE*
句柄或POSIX文件描述符获取完全限定的路径?
答案 0 :(得分:4)
通常,文件可能有多个名称(硬链接),根本没有名称(未链接的文件),文件描述符可能连接到文件系统中未表示的内容(例如管道或套接字)
在Linux下,你可以做到
snprintf(buf, bufsize, "/proc/self/fd/%d", fd);
rc = readlink(buf, filename, filename_size);
如果readlink
成功,filename
是绝对路径(以斜杠/
开头),则它可能包含文件名(但不一定是唯一的) fd
所连接的文件 - 但它也可能包含其他内容(例如文件的名称后跟(deleted)
)。如果filename
没有以斜线开头,那么你运气不好。
据我所知,没有可行的方式做这样的事情。