uv_fs_event_t — FS Eventハンドル

FS Eventハンドルは、指定したパスの変更を監視できます。たとえば、ファイル名の変更や、ファイル内の一般的な変更を検出します。このハンドルは、プラットフォームごとに最適なバックエンドを使います。

注記

AIXでは、標準では導入されないIBM bos.ahafsパッケージをインストールする必要があります。AIX Event Infrastructureファイルシステム(ahafs)には、次の制限があります。

  • ahafsはプロセス単位で監視を管理しており、スレッドセーフではありません。同じイベントを監視する場合、監視ハンドルごとに別のプロセスを起動する必要があります。

  • ファイルを含むフォルダーだけを監視している場合、ファイルの変更(書き込み)イベントは受信しません。

詳しくは、文書を参照してください。

z/OSのファイルシステムイベント監視基盤は、監視しているディレクトリー内でのファイルの作成や削除を通知しません。詳しくは、IBM Knowledge centreを参照してください。

データ型

type uv_fs_event_t

FS Eventハンドルの型です。

typedef void (*uv_fs_event_cb)(uv_fs_event_t *handle, const char *filename, int events, int status)

次の関数へ渡すコールバックです: uv_fs_event_start()。ハンドルを開始した後、繰り返し呼び出します。

ディレクトリーを指定してハンドルを開始した場合、filenameパラメーターは、そのディレクトリー内のファイルへの相対パスです。ファイル名を特定できない場合は、NULLになります。

次のパラメーター、eventsは、次の列挙型の要素をORで組み合わせたマスクです: uv_fs_event。

注記

FreeBSDでは、カーネルのバグにより、パスがNULLになる場合があります。

enum uv_fs_event

次の型のハンドルが監視するイベントの型です: uv_fs_event_t。

enum uv_fs_event {
    UV_RENAME = 1,
    UV_CHANGE = 2
};
enum uv_fs_event_flags

次の関数へ渡して動作を制御するフラグです: uv_fs_event_start()。

enum uv_fs_event_flags {
    /*
    * By default, if the fs event watcher is given a directory name, we will
    * watch for all events in that directory. This flags overrides this behavior
    * and makes fs_event report only changes to the directory entry itself. This
    * flag does not affect individual files watched.
    * This flag is currently not implemented yet on any backend.
    */
    UV_FS_EVENT_WATCH_ENTRY = 1,
    /*
    * By default uv_fs_event will try to use a kernel interface such as inotify
    * or kqueue to detect events. This may not work on remote file systems such
    * as NFS mounts. This flag makes fs_event fall back to calling stat() on a
    * regular interval.
    * This flag is currently not implemented yet on any backend.
    */
    UV_FS_EVENT_STAT = 2,
    /*
    * By default, event watcher, when watching directory, is not registering
    * (is ignoring) changes in its subdirectories.
    * This flag will override this behaviour on platforms that support it.
    */
    UV_FS_EVENT_RECURSIVE = 4
};

公開メンバー

該当なし

関連項目

次の型のuv_handle_tメンバーも適用されます。

API

int uv_fs_event_init(uv_loop_t *loop, uv_fs_event_t *handle)

ハンドルを初期化します。

int uv_fs_event_start(uv_fs_event_t *handle, uv_fs_event_cb cb, const char *path, unsigned int flags)

指定したコールバックでハンドルを開始し、指定したpathの変更を監視します。flagsには、次の列挙型のフラグをORで組み合わせたマスクを指定できます: uv_fs_event_flags。

注記

現在サポートしているフラグは、UV_FS_EVENT_RECURSIVEだけであり、OSXとWindowsだけで利用できます。

注記

macOSでは、uv_fs_event_startを呼び出す直前にOSが収集したイベントを、uv_fs_event_cbコールバックへ通知する場合があります。

int uv_fs_event_stop(uv_fs_event_t *handle)

ハンドルを停止します。以後、コールバックを呼び出しません。

int uv_fs_event_getpath(uv_fs_event_t *handle, char *buffer, size_t *size)

ハンドルが監視しているパスを取得します。バッファはユーザーが事前に確保する必要があります。成功時は0、失敗時は0未満のエラーコードを返します。成功時は、bufferにパスが入り、sizeにその長さが入ります。バッファが十分な大きさでない場合は、UV_ENOBUFSを返し、sizeを、ヌル終端文字を含む必要なサイズに設定します。

バージョン1.3.0での変更: 返す長さに終端ヌルバイトを含めなくなり、バッファもヌル終端しなくなりました。

バージョン1.9.0での変更: 次のエラー、UV_ENOBUFSの場合、返す長さに終端ヌルバイトを含めるようになりました。また、成功時にはバッファをヌル終端します。

関連項目

次の型のuv_handle_tAPI関数も適用されます。