Linux 进程终止时丢弃打开的文件
有没有一种方法可以在Linux上用C/C++应用程序编写打开的文件,如果应用程序被终止,打开的文件将被丢弃Linux 进程终止时丢弃打开的文件,linux,file-io,filehandle,Linux,File Io,Filehandle,有没有一种方法可以在Linux上用C/C++应用程序编写打开的文件,如果应用程序被终止,打开的文件将被丢弃 SIGKILL可以终止应用程序,因此我不能使用信号处理程序。临时文件的典型技巧是打开/创建一个文件,然后在不关闭文件描述符的情况下取消链接 最后,您得到了一个文件描述符,该描述符指向一个不再存在的文件。您仍然可以对其进行读取和写入,但一旦关闭文件描述符(或被终止),文件将被删除,并释放其占用的空间 当然,如果您决定以后要保留该文件,则此操作实际上不起作用。对于“放弃”,您的意思是从文件系统
SIGKILL可以终止应用程序,因此我不能使用信号处理程序。临时文件的典型技巧是打开/创建一个文件,然后在不关闭文件描述符的情况下取消链接 最后,您得到了一个文件描述符,该描述符指向一个不再存在的文件。您仍然可以对其进行读取和写入,但一旦关闭文件描述符(或被终止),文件将被删除,并释放其占用的空间
当然,如果您决定以后要保留该文件,则此操作实际上不起作用。对于“放弃”,您的意思是从文件系统中删除(删除)?可能不在进程本身中。写入文件时,文件名必须正确,这一点很重要。如果没有,你可以用一个临时的名字来写。如果进程一直持续到
close()
,请重命名该文件。如果进程被终止,您如何清除临时文件取决于您想做的事情有多紧急:常规清理cron,父进程,它会注意到子进程已死亡,并在子进程死后进行清理。不能使用链接(“/proc/self/fd/n”,“永久名称”)代码>如果想要保留该文件?@BenVoigt正常情况下,该链接将(非法)跨越文件系统边界。这是特殊情况吗?@Jonas:经过进一步研究,显然不是proc//fd
是特殊情况,它们是在删除目标时不会中断的符号链接。但是link
不够聪明,无法重新链接目标。也许还有其他功能?@Jonas:事实上,这个问题给出了答案linkat
带有AT_FDCWD
和AT_EMPTY_路径
标志。另请参见,我在手册页中找不到任何支持材料,很遗憾。但是,是的,我在这里评论之后才看到答案!