2009-09-10 52 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該文件的有效路徑。