4

inotifyを使用して、ファイルが無限ループで変更されていないかどうかを監視しようとしています。私はそれにいくつかの問題を抱えています:

1)while(1)があり、whileの反復ごとに新しいファイル記述子と新しい監視記述子を作成しない限り、読み取りは機能しません(私がやりたかったのは、無限ループの前にこれらの記述子を開くことです、しかし、他の解決策が受け入れられる場合、私はそれを使用することができます)。これは動作するバージョンです:

 while(1){
    int file_descriptor = inotify_init();
    if (file_descriptor < 0) {
        perror("inotify_init");
    }

    int watch_descriptor = inotify_add_watch(file_descriptor, "/home/user/hello.cfg", IN_CLOSE_WRITE);
    ....

2)マスクIN_MODIFYを使用しようとしましたが、vimではうまく機能しないことを読んだので、代わりにIN_CLOSE_WRITEを使用します。問題は、vimでファイルを変更すると、イベントは読み取られますが、イベントのマスクはIN_IGNORED(Mask 0x00008000)であるということです。geditを使用すると、イベントのマスクがIN_IGNOREDになることもあれば、IN_CLOSE_WRITE(マスク0x0000008)になることもあります。ファイルを変更しているときにIN_IGNOREDが発生する理由と、イベントがIN_CLOSE_WRITEではない理由を知りたいのですが。単一のファイルの変更を監視する別の方法はありますか?IN_CLOSE_WRITEは正しいマスクですか?

4

1 に答える 1