2014-01-26 41 views
3

有没有办法在C/C++应用程序的Linux上编写打开文件的方式,如果应用程序被终止,打开的文件将被丢弃?在进程死亡时放弃打开的文件

该应用程序可以被SIGKILL杀死,所以我不能使用信号处理程序。

+0

丢弃的意思是从文件系统中删除(删除)? – Harald

+0

可能不可能在流程本身内。写入文件时是否有正确的名称是重要的。如果没有,你可以用一个临时名称来写。如果该过程继续存在直到close(),那么重命名该文件。如果进程被终止,你如何摆脱临时文件就是你想要做到这一点的紧急问题:定期清理cron,父进程注意到子进程已经死了,并在其后清理。 – Harald

回答

1

临时文件的典型技巧是打开/创建文件,然后在不关闭文件描述符的情况下取消链接。

您最终得到一个文件描述符给一个不再存在的文件。您仍然可以读取并写入它,但只要您关闭文件描述符(或被终止),该文件将被移除并释放它占用的空间。

当然,如果您决定继续保留文件,那并不会真正起作用。

+0

不能使用'link(“/ proc/self/fd/n”,“permanent-name”);'如果有人想保留这个文件? –

+0

@ BenVoigt通常,该链接会(非法)跨越文件系统边界。这是一个特例吗? –

+0

@Jonas:经过进一步的研究,显然不是。 'proc /./fd'是特殊情况,它们是在目标被删除时不会中断的符号链接。但'链接'不够聪明重新链接目标。也许还有一些其他功能是? –