退出时删除文件

时间:2011-06-12 16:24:59

标签: perl

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

访问此功能

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

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

5 个答案:

答案 0 :(得分:10)

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

  1. 创建并打开文件(保留文件句柄)
  2. 立即致电文件<{li>上的unlink
  3. 使用文件句柄正常继续,并在您感觉
  4. 时退出

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

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

答案 1 :(得分:4)

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

答案 2 :(得分:2)

您正在寻找atexit()。在Perl中,这通常使用END块来完成。 Java和Perl提供了自己的功能,因为它们希望可以移植到不遵循相关标准的系统(在本例中为C90)。

那就是说,在Unix上,常见的约定是open一个文件,然后是unlink它;当最后一个引用(也就是你的文件描述符)关闭时,内核将删除它。你几乎总是想打开读+写。

答案 3 :(得分:2)

我认为您正在寻找一个名为tmpfile()的函数,该函数在调用时创建文件并在关闭时删除它。检查,article

答案 4 :(得分:0)

您可以使用END block开展工作。