【发布时间】:2013-04-16 15:44:28
【问题描述】:
现在,这个问题可能看起来很奇怪,而且很可能是,但是为了提供一些上下文,我一直在阅读 this 以了解 i-nodes,其中作者给出了一个有趣的示例:
{
FILE *fp;
fp = fopen("some.hidden.file","w");
unlink("some.hidden.file"); /* deletes the filename part */
/* some.hidden.file no longer has a filename and is truly hidden */
fprintf(fp,"This data won't be found\n"); /* access the data part */
/*etc*/
fclose(fp); /* finally release the data part */
}
这允许创建一个“隐藏”的临时文件。
我的问题是:有没有办法重新创建一个指向 fp 打开的 inode 的文件名在调用 unlink() 之后?
免责声明:我不打算在实际代码中这样做;我只是(重新)学习 i 节点并想知道这是否可能。
【问题讨论】:
-
AFAIK,无法为打开的文件描述符命名。
-
来自manpage:“如果名称是文件的最后一个链接,但任何进程仍然打开该文件,则该文件将一直存在,直到最后一个引用它的文件描述符被关闭。 "
-
@BartFriederichs:当然,这就是我提供的链接中解释的内容。但它并没有真正回答我的问题,更多的是:“有没有办法在它被破坏之前重新创建一个指向当前打开的“i-node”的文件?”
-
打开的“文件”仍将显示在 /proc/"pid"/fd/ 下,但我不确定您是否可以从中创建(符号)链接。