等待文件关闭后再删除文件

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;
}

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

你可能会对这个感兴趣。 - sjsam
也许您可以查看这篇SO帖子man页面 - user3078414
2个回答

1
使用lsof命令检查哪些文件处于打开状态。(lsof - 列出打开的文件
例如,您可以使用 -F p 参数调用 lsof 命令,它将输出进程的 pid,并以 'p' 为前缀:
$ lsof -F p /some/file
p1234
p4567

参考:lsof man page

嗨,那是一个好方法。不过,我需要以编程方式实现它。也许你知道用于检查文件是否已打开的C/C++ API? - Zohar81
请阅读man页面上的其他程序输出部分。它说你需要一个头文件lsof_fields.h - Ani Menon

0

你好,感谢你的提议。不过我想知道是否有任何方法可以在打开文件时使用C/C++ API设置“immutable”属性。此外,似乎“immutable”属性也被强制应用于setter,并且我想继续向文件中写入内容,只是防止删除。 - Zohar81

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接