我有一个使用使用该函数创建的临时文件的程序mkstemps
。这些文件是在/tmp
目录内创建的。
程序退出时这些文件会自动删除吗?
我想知道我的程序是否应该在退出之前删除这些文件。如果它们没有自动删除,是否可以不删除它们并保留它们/tmp
?或者在程序退出之前使用unlink
或删除它们是更好的做法吗?remove
答案1
由其中之一创建的文件mkstemp
函数族程序退出时不会自动删除。根据它们的内容,您可以选择将它们保留在 中/tmp
,这通常会定期清理,但这有点糟糕。
有两种主要方法可以干净地处理这个问题:
- 如果没有其他进程需要能够打开临时文件,或者您可以通过传递文件描述符来处理此问题,那么您可以在
mkstemps
返回后立即删除该文件 - 该文件仍然存在,但它将不再出现在目录列表中,一旦你找到close
文件描述符,它就会被删除; atexit
否则,注册一个用于删除文件的退出函数。
答案2
您应该在使用open(O_CREAT)
或类似创建它们后立即删除它们,并且仅通过返回的文件描述符使用它们。
像这样的更高级别的接口tmpfile(3)
将为您做到这一点,甚至可能使用更好的方法,例如O_TMPFILE
在 Linux 上(请参阅打开(2)联机帮助页中的描述)。
“退出前”删除它们是错误的,因为您的程序可能会在删除它们之前异常终止。