程序应该删除 /tmp 中的临时文件吗?

程序应该删除 /tmp 中的临时文件吗?

我有一个使用使用该函数创建的临时文件的程序mkstemps。这些文件是在/tmp目录内创建的。

程序退出时这些文件会自动删除吗?

我想知道我的程序是否应该在退出之前删除这些文件。如果它们没有自动删除,是否可以不删除它们并保留它们/tmp?或者在程序退出之前使用unlink或删除它们是更好的做法吗?remove

答案1

由其中之一创建的文件mkstemp函数族程序退出时不会自动删除。根据它们的内容,您可以选择将它们保留在 中/tmp,这通常会定期清理,但这有点糟糕。

有两种主要方法可以干净地处理这个问题:

  • 如果没有其他进程需要能够打开临时文件,或者您可以通过传递文件描述符来处理此问题,那么您可以在mkstemps返回后立即删除该文件 - 该文件仍然存在,但它将不再出现在目录列表中,一旦你找到close文件描述符,它就会被删除;
  • atexit否则,注册一个用于删除文件的退出函数。

答案2

您应该在使用open(O_CREAT)或类似创建它们后立即删除它们,并且仅通过返回的文件描述符使用它们。

像这样的更高级别的接口tmpfile(3)将为您做到这一点,甚至可能使用更好的方法,例如O_TMPFILE在 Linux 上(请参阅打开(2)联机帮助页中的描述)。

“退出前”删除它们是错误的,因为您的程序可能会在删除它们之前异常终止。

相关内容