退出时删除文件

Adr*_*ith 2 perl

也许我错了,但我确信UNIX和C标准库提供了一些工具来让操作系统在进程退出后删除文件.但我不记得它叫什么(或者我想象它).在我的特定情况下,我想从perl访问此功能.

Java有这个deleteOnExit功能但我知道删除是由JVM完成的,而不是操作系统,这意味着如果JVM不正常地退出(例如电源故障),那么文件永远不会被删除.

但我理解我正在寻找的设施(如果它存在),因为它是由操作系统提供的,操作系统会查找文件的删除,可能是在电源故障等情况下在OS启动时进行一些清理工作,当然在进程不洁的情况下进行清理.

Chr*_*rle 10

一个非常简单的解决方案(仅适用于*nix系统)是:

  1. 创建并打开文件(保持文件句柄)
  2. 立即调用unlink该文件
  3. 使用文件句柄正常进行,并在您感觉到时退出

然后,当您的程序完成时,文件描述符将关闭,文件将被真正删除.如果程序崩溃,这甚至可以工作.

当然,这仅适用于单个脚本的上下文(即其他脚本无法直接操作文件,尽管您可以将它们传递给文件描述符).


yst*_*sth 5

如果您正在寻找操作系统在电源故障后重新启动时可以自动处理的内容,则 END 块是不够的,您需要在操作系统期望临时文件的位置创建文件。一旦你这样做了,你应该只使用File::Temp例程之一(如果你愿意的话,它甚至可以为你提供打开和立即取消链接文件的选项)。