#macos #events #api-bindings #watch #notify

fsevent-stream

基于流的FSEvent API绑定

5 个版本

0.2.3 2022年1月9日
0.2.2 2021年12月12日
0.2.1 2021年12月9日
0.2.0 2021年12月4日
0.1.0 2021年12月4日

#1288 in 文件系统

每月 24 次下载

MIT 许可证

49KB
923

fsevent-stream

GitHub Workflow Status crates.io Documentation

基于流的 FSEvents API绑定。

特性

  • 支持目录粒度和文件粒度事件。
  • 使用 kFSEventStreamCreateFlagUseExtendedData 获取相关文件inode。

示例

use std::path::Path;
use std::time::Duration;

use fsevent_stream::ffi::{
    kFSEventStreamCreateFlagFileEvents, kFSEventStreamCreateFlagNoDefer,
    kFSEventStreamCreateFlagUseCFTypes, kFSEventStreamCreateFlagUseExtendedData,
    kFSEventStreamEventIdSinceNow,
};
use fsevent_stream::stream::create_event_stream;
use futures_util::StreamExt;

let (stream, handler) = create_event_stream(
    [Path::new(".")],
    kFSEventStreamEventIdSinceNow,
    Duration::ZERO,
    kFSEventStreamCreateFlagNoDefer
        | kFSEventStreamCreateFlagFileEvents
        | kFSEventStreamCreateFlagUseExtendedData
        | kFSEventStreamCreateFlagUseCFTypes,
)
    .expect("stream to be created");

let mut stream = stream.into_flatten();
while let Some(event) = stream.next().await {
    println!(
        "[{}] path: {:?}({}), flags: {} ({:x})",
        event.id,
        event.path,
        event.inode.unwrap_or(-1),
        event.flags,
        event.raw_flags
    );
}

运行时支持

通过功能标志,同时支持 tokioasync-std

tokio 支持默认开启。要启用 async-std 支持需要禁用默认功能并启用 async-std 功能。

致谢

本项目中的部分代码来自以下项目

许可证

本项目采用 MIT 许可证

FOSSA Status

依赖

~1–4MB
~75K SLoC