2009-09-10 48 views

回答

4

我不相信有任何移植的方法,但如在Linux上,您可以拨打电子邮件readlink"/proc/self/fd/fileno"并且内核将为您提供一个路径(如果可以的话),或者如果不是,则为各种有趣的字符串之一。

+0

很酷,但不要将它与readlink()C函数混淆,该函数在符号链接的末尾读取文件的内容。 –

+0

它看起来像我可以扫描文件系统打开文件,因为我去和比较inode。 这样做当然是绝对的垃圾,正如学习者提到的,没有办法知道遇到的第一个文件可能是许多硬链接之一。 我怀疑更简单,更有效率的方法是仅仅外部初始路径var。 – tapi

+0

@Don:这个*是* readlink()C函数,它读取符号链接的目标的*名称*,而不是内容。 – hobbs

0

可能有一个或多个文件的名称,所以没有标准方式。 我不确定是否可以有某些操作系统特定的。

3

如果你足够幸运地被使用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 
} 

注意,你回来的路不一定用来打开该文件的一个...如果存在硬链接,尤其是,您返回的路径将为a该文件的有效路径。