Win32 CreateFile有FILE_FLAG_DELETE_ON_CLOSE,但我在Linux上.
我想打开一个临时文件,在程序终止时将永远删除该文件.我可以理解,在程序崩溃的情况下,保证这一点可能不切实际,但在任何其他情况下我都希望它能够工作.
我知道RAII.我知道信号.我知道atexit(3).我知道我可以打开文件并立即删除它,文件将保持可访问状态,直到文件描述符关闭(甚至处理崩溃).这些似乎都不是一个完整而直接的解决方案:
sigaction(2)来应对......但是还没有充分考虑这种可能性.atexit(3):显然没用,因为它在异常终止期间没有被调用(例如通过信号).unlink(2):这是非常好的,除了我需要文件在文件系统中保持可见(否则系统更难监控/故障排除).你会在这做什么?
进一步说明
我在原帖中省略了一个细节,我现在意识到应该包含这个细节.在这种情况下,"文件"不是严格意义上的普通文件,而是POSIX消息队列.我通过创建它mq_open().它可以通过mq_close()或关闭close()(前者是我系统中后者的别名).它可以通过系统删除mq_unlink().所有这些使它类似于常规文件,除了我不能选择文件所在的目录.这使得当前最流行的答案(放置文件/tmp)变得不可行,因为"文件"是由系统在容量非常有限的虚拟文件系统中创建的.(我已经/dev/mqueue按照示例安装了虚拟文件系统man mq_overview).
这也解释了为什么我需要保持名称的名称(使立即取消链接方法不可行):"文件"必须在两个或多个进程之间共享.
使用C或C++,在将文件解密到磁盘后 - 如果应用程序崩溃或系统关闭且无法正常清理,我如何保证将其删除?在Windows和Linux上使用C或C++?