Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 进程终止时丢弃打开的文件_Linux_File Io_Filehandle - Fatal编程技术网

Linux 进程终止时丢弃打开的文件

Linux 进程终止时丢弃打开的文件,linux,file-io,filehandle,Linux,File Io,Filehandle,有没有一种方法可以在Linux上用C/C++应用程序编写打开的文件,如果应用程序被终止,打开的文件将被丢弃 SIGKILL可以终止应用程序,因此我不能使用信号处理程序。临时文件的典型技巧是打开/创建一个文件,然后在不关闭文件描述符的情况下取消链接 最后,您得到了一个文件描述符,该描述符指向一个不再存在的文件。您仍然可以对其进行读取和写入,但一旦关闭文件描述符(或被终止),文件将被删除,并释放其占用的空间 当然,如果您决定以后要保留该文件,则此操作实际上不起作用。对于“放弃”,您的意思是从文件系统

有没有一种方法可以在Linux上用C/C++应用程序编写打开的文件,如果应用程序被终止,打开的文件将被丢弃


SIGKILL可以终止应用程序,因此我不能使用信号处理程序。

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

最后,您得到了一个文件描述符,该描述符指向一个不再存在的文件。您仍然可以对其进行读取和写入,但一旦关闭文件描述符(或被终止),文件将被删除,并释放其占用的空间


当然,如果您决定以后要保留该文件,则此操作实际上不起作用。

对于“放弃”,您的意思是从文件系统中删除(删除)?可能不在进程本身中。写入文件时,文件名必须正确,这一点很重要。如果没有,你可以用一个临时的名字来写。如果进程一直持续到
close()
,请重命名该文件。如果进程被终止,您如何清除临时文件取决于您想做的事情有多紧急:常规清理cron,父进程,它会注意到子进程已死亡,并在子进程死后进行清理。不能使用
链接(“/proc/self/fd/n”,“永久名称”)如果想要保留该文件?@BenVoigt正常情况下,该链接将(非法)跨越文件系统边界。这是特殊情况吗?@Jonas:经过进一步研究,显然不是
proc//fd
是特殊情况,它们是在删除目标时不会中断的符号链接。但是
link
不够聪明,无法重新链接目标。也许还有其他功能?@Jonas:事实上,这个问题给出了答案
linkat
带有
AT_FDCWD
AT_EMPTY_路径
标志。另请参见,我在手册页中找不到任何支持材料,很遗憾。但是,是的,我在这里评论之后才看到答案!