2009-05-06 43 views
3

給定一個stdio FILE *指針,有沒有一種方法可以讓我發現(打開的)文件的名稱?確定文件中的(打開的)文件名*

+0

文件描述符是一個整數,它與FILE *不同。我假設你想要FILE *的答案,但你可能想編輯你的標題。 – mkb 2009-05-06 18:32:13

回答

8

它看起來(從here),在POSIX系統上,您可以使用fileno()從FILE *獲取文件描述符,然後使用fstat從文件描述符獲取stat信息。 stat結構包含設備編號和inode編號。您可以檢查文件系統中與inode匹配的文件。這顯然需要一段時間才能完成一個文件系統。

這是不可能的原因(正如鏈接文章中所解釋的):如果流類似於stdin或stdout,或者它是一個已被刪除的打開文件,則該流可以沒有文件名。由於硬鏈接,它也可以有多個名稱。

鏈接文章提到this comp.lang.c FAQ簡要概述了這個問題的不可溶性。

編輯:感謝您的更正。

+0

感謝您的回答不僅僅是「不可以」。 – Jamie 2009-05-06 19:25:45

2

不,沒有。除此之外,FILE *可能不會引用指定的文件。如果您的應用程序需要此功能,您需要將打開的FILE * s中的某種地圖 保留爲用於打開它們的文件名。

1

沒有標準定義的便攜式解決方案。但是,您可以查看您的操作系統提供的API集。 POSIX系統有一個fstat函數,它帶有一個描述符(不是FILE *)並返回一些信息。