相关疑难解决方法(0)

程序终止时保证文件删除(C/C++)

Win32 CreateFileFILE_FLAG_DELETE_ON_CLOSE,但我在Linux上.

我想打开一个临时文件,在程序终止时将永远删除该文件.我可以理解,在程序崩溃的情况下,保证这一点可能不切实际,但在任何其他情况下我都希望它能够工作.

我知道RAII.我知道信号.我知道atexit(3).我知道我可以打开文件并立即删除它,文件将保持可访问状态,直到文件描述符关闭(甚至处理崩溃).这些似乎都不是一个完整而直接的解决方案:

  1. RAII:去过那里,完成了:我有一个析构函数删除文件的对象,但如果程序被一个信号终止,则不会调用析构函数.
  2. 信号:我正在编写一个低级库,这使得注册信号处理程序变得棘手.例如,如果应用程序本身使用信号怎么办?我不想踩任何脚趾.我可能会考虑巧妙地使用它sigaction(2)来应对......但是还没有充分考虑这种可能性.
  3. atexit(3):显然没用,因为它在异常终止期间没有被调用(例如通过信号).
  4. preemptive unlink(2):这是非常好的,除了我需要文件在文件系统中保持可见(否则系统更难监控/故障排除).

你会在这做什么?

进一步说明

我在原帖中省略了一个细节,我现在意识到应该包含这个细节.在这种情况下,"文件"不是严格意义上的普通文件,而是POSIX消息队列.我通过创建它mq_open().它可以通过mq_close()或关闭close()(前者是我系统中后者的别名).它可以通过系统删除mq_unlink().所有这些使它类似于常规文件,除了我不能选择文件所在的目录.这使得当前最流行的答案(放置文件/tmp)变得不可行,因为"文件"是由系统在容量非常有限的虚拟文件系统中创建的.(我已经/dev/mqueue按照示例安装了虚拟文件系统man mq_overview).

这也解释了为什么我需要保持名称的名称(使立即取消链接方法不可行):"文件"必须在两个或多个进程之间共享.

c c++ file termination unlink

20
推荐指数
2
解决办法
5063
查看次数

如何保证在运行时解密的文件被清除?

使用C或C++,在将文件解密到磁盘后 - 如果应用程序崩溃或系统关闭且无法正常清理,我如何保证将其删除?在Windows和Linux上使用C或C++?

c c++ filesystems encryption

3
推荐指数
2
解决办法
1312
查看次数

标签 统计

c ×2

c++ ×2

encryption ×1

file ×1

filesystems ×1

termination ×1

unlink ×1