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

0

chattr (参照: https://en.wikipedia.org/wiki/Chattr ) を使用して、ファイルが削除されないようにすることができます。「不変」プロパティを読み取ります。

于 2016-05-08T10:11:10.997 に答える