3

一部のファイルの変更を監視するために inotify を使用しています。問題は、inotify_event event->name が空であるため、どのファイルが変更されたか分からないことです

event->name が空なのはなぜですか?

fd = inotify_init();
wd = inotify_add_watch (m_fd, "/tmp/myfile", IN_MODIFY | IN_CREATE | IN_DELETE);
wd1 = inotify_add_watch (m_fd, "/tmp/myfile2", IN_MODIFY | IN_CREATE | IN_DELETE);
-----
unsigned char buffer[BUFFER_SIZE];

    ssize_t len = ACE_OS::read(fd, buffer, sizeof(buffer));
    ssize_t i = 0;

    while (i < len)
    {
        inotify_event *event = ( struct inotify_event * ) &buffer[ i ];
            i += EVENT_SIZE + event->len;
        }
4

1 に答える 1

8

inotifyのマニュアルページから...

名前フィールドは、監視対象ディレクトリ内のファイルに対してイベントが返された場合にのみ表示されます。監視対象ディレクトリを基準にしたファイルパス名を識別します。このパス名はnullで終了し、後続の読み取りを適切なアドレス境界に揃えるために、さらにnullバイトが含まれる場合があります。

ディレクトリではなくファイルだけを見ているので、名前は常に空になります。

于 2011-12-07T21:48:26.993 に答える