3

我正在开发一个在 OS X 下用 C/C++ 实现的配额管理器,它限制特定文件夹的最大大小。在我的项目中,有通用线程工作者可以执行将新数据写入文件夹或将数据从文件夹移动到服务器。

这样,有时,删除任务可能会删除仍在由另一个线程写入磁盘的文件。

我可以以某种方式防止文件在写入过程中被删除。我可以实现自己的机制(使用标志、锁等),但我相信它应该是文件系统属性。

我试过下面的代码来检查文件的删除失败是否仍然打开,但它实际上是成功的。

#include <stdio.h> 
int main() {
    FILE *fp;
    fp=fopen("./x", "w");
    fprintf(fp, "Testing...\n");
    if( remove( "./x" ) != 0 )
        perror( "Error deleting file" );
    else
        puts( "File successfully deleted" );
    return 0;
}

如何在删除之前强制关闭文件?

4

2 回答 2

1

使用该lsof命令检查打开了哪些文件。(lsof - 列出打开的文件

例如,您可以使用 -F p 调用 lsof,它会输出以“p”为前缀的进程的 pid:

$ lsof -F p /some/file
p1234
p4567

参考:lsof 手册页

于 2016-05-08T10:23:29.190 回答
0

您可以使用 chattr(参见:https ://en.wikipedia.org/wiki/Chattr )来防止文件被删除。阅读“不可变”属性。

于 2016-05-08T10:11:10.997 回答