2016-09-19 38 views
-2

給定一個文件指針FP指向一個打開的文件,有沒有給它一個名字一個可移植的方式?在這種情況下,不能使用重命名,因爲我沒有引用該文件的當前名稱。定名匿名文件指針

+0

「_points打開的文件_」 ......這是什麼意思? –

+1

的可能的複製[重新鏈接的匿名(無關聯,但打開)文件(http://stackoverflow.com/questions/4171713/relinking-an-anonymous-unlinked-but-open-file) – slim

+1

我覺得「可能欺騙」主要回答你的問題 - 你不能。唯一可能的區別是您的文件可能會鏈接到某個文件名,但它仍然是一個安全「事情」,您不允許向後發現該關係。 – slim

回答

3

在Linux上,你可以通過指定AT_EMPTY_PATH標誌使用linkat

int linkat(int olddirfd, const char *oldpath, 
      int newdirfd, const char *newpath, int flags); 

。例如,類似的東西:

linkat(fileno(fp), NULL, AT_FDCWD, "/path/to/new/name", AT_EMPTY_PATH); 

請注意,這並不重命名的原始文件,它只是創建了一個新的硬盤鏈接到它(即一個新的名稱)。此外,這種方法是不便攜的,因爲AT_EMPTY_PATH是一個Linux擴展。

+0

'fp'應該是'fileno(fp)',因爲他提到'fp'是'FILE *'。 – Barmar

+0

這個答案令人困惑,因爲你編寫的'linkat'的示例調用不使用描述的'AT_EMPTY_PATH'。 –

+0

@IanAbbott哎呀,我的壞,我修好了。 – redneb