44

inotifyLinuxでその仕組みを使いたい。ファイルがいつ変更されたかをアプリケーションに知らせたいaaa。その方法のサンプルを教えてください。

4

4 に答える 4

43

inotifyC API

inotifyあらゆる種類のファイル システム モニターを構築するための 3 つのシステム コールを提供します。

  • inotify_init()サブシステムのインスタンスをカーネルに作成し、成功時と失敗時inotifyにファイル記述子を返します。-1他のシステム コールと同様に、inotify_init()失敗した場合errnoは診断を確認します。
  • inotify_add_watch()は、その名前が示すように、ウォッチを追加します。各ウォッチは、パス名と関連するイベントのリストを提供する必要があります。各イベントは、 などの定数で指定されIN_MODIFYます。複数のイベントを監視するには、単純に論理 OR (C のパイプ (|) 演算子) を各イベントの間に使用します。inotify_add_watch()成功した場合、呼び出しは登録されたウォッチの一意の識別子を返します。それ以外の場合は、 を返します-1。関連付けられたウォッチを変更または削除するには、識別子を使用します。
  • inotify_rm_watch()時計を削除します。

およびシステム コールも必要ですread()close()によって生成された記述子を指定してinotify_init()、 を呼び出しread()てアラートを待ちます。典型的なファイル記述子を仮定すると、アプリケーションは、ストリーム内のデータとして表現されるイベントの受信を保留してブロックします。削除から生成されたファイル記述子の一般的な close() は、inotify_init()すべてのアクティブなウォッチと inotify インスタンスに関連付けられたすべてのメモリを削除および解放します。(典型的な参照カウントの警告がここにも適用されます。インスタンスに関連付けられたすべてのファイル記述子は、監視および inotify によって消費されたメモリが解放される前に閉じられる必要があります。)

#include "inotify.h"  
#include "inotify-syscalls.h"  
int wd;   
wd = inotify_add_watch (fd,   
            "/home/rlove/Desktop", IN_MODIFY | IN_CREATE | IN_DELETE);
if (wd < 0)
      perror ("inotify_add_watch");

この例では、変更、ファイルの作成、またはファイルの削除について、ディレクトリ /home/rlove/Desktop に監視を追加します。

于 2010-10-31T10:56:10.983 に答える
14

以下は、inotify を使用して「aaa」を監視する方法のスニペットです。私はこれをテストしておらず、コンパイルさえしていないことに注意してください! エラーチェックを追加する必要があります。

ブロッキング読み取りを使用する代わりに、inotfd で poll/select を使用することもできます。

const char *filename = "aaa";
int inotfd = inotify_init();

int watch_desc = inotify_add_watch(inotfd, filename, IN_MODIFY);

size_t bufsiz = sizeof(struct inotify_event) + PATH_MAX + 1;
struct inotify_event* event = malloc(bufsiz);

/* wait for an event to occur */
read(inotfd, event, bufsiz);

/* process event struct here */
于 2010-11-02T18:10:56.823 に答える
10

コマンドライン アプリケーションだけが必要な場合は、以下inotifywaitを使用してファイルを監視するという名前のアプリケーションがありますinotify

ターミナル1から

# touch cheese
# while inotifywait -e modify cheese; do 
>   echo someone touched my cheese
> done

第2ターミナルから

echo lol >> cheese

これがターミナル1で見られるものです

Setting up watches.
Watches established.
cheese MODIFY 
someone touched my cheese
Setting up watches.
Watches established.

更新:注意して使用し、コメントを参照してください。

于 2018-03-16T21:06:58.067 に答える