43 个版本

0.11.0 2024 年 8 月 19 日
0.10.2 2023 年 7 月 27 日
0.10.1 2023 年 6 月 7 日
0.10.0 2021 年 12 月 7 日
0.1.0 2014 年 12 月 22 日

#16 in 文件系统

Download history 293726/week @ 2024-05-03 292074/week @ 2024-05-10 310802/week @ 2024-05-17 294663/week @ 2024-05-24 323463/week @ 2024-05-31 300003/week @ 2024-06-07 300042/week @ 2024-06-14 309064/week @ 2024-06-21 289724/week @ 2024-06-28 278860/week @ 2024-07-05 297884/week @ 2024-07-12 308450/week @ 2024-07-19 307946/week @ 2024-07-26 290660/week @ 2024-08-02 321421/week @ 2024-08-09 296799/week @ 2024-08-16

1,277,306 每月下载量
用于 1,257 个 Crates(直接使用 61 个)

ISC 许可证

61KB
716 代码行

inotify-rs crates.io Documentation Rust

Rust 编程语言的 inotify 惯用封装。

extern crate inotify;


use std::env;

use inotify::{
    EventMask,
    WatchMask,
    Inotify,
};


fn main() {
    let mut inotify = Inotify::init()
        .expect("Failed to initialize inotify");

    let current_dir = env::current_dir()
        .expect("Failed to determine current directory");

    inotify
        .watches()
        .add(
            current_dir,
            WatchMask::MODIFY | WatchMask::CREATE | WatchMask::DELETE,
        )
        .expect("Failed to add inotify watch");

    println!("Watching current directory for activity...");

    let mut buffer = [0u8; 4096];
    loop {
        let events = inotify
            .read_events_blocking(&mut buffer)
            .expect("Failed to read inotify events");

        for event in events {
            if event.mask.contains(EventMask::CREATE) {
                if event.mask.contains(EventMask::ISDIR) {
                    println!("Directory created: {:?}", event.name);
                } else {
                    println!("File created: {:?}", event.name);
                }
            } else if event.mask.contains(EventMask::DELETE) {
                if event.mask.contains(EventMask::ISDIR) {
                    println!("Directory deleted: {:?}", event.name);
                } else {
                    println!("File deleted: {:?}", event.name);
                }
            } else if event.mask.contains(EventMask::MODIFY) {
                if event.mask.contains(EventMask::ISDIR) {
                    println!("Directory modified: {:?}", event.name);
                } else {
                    println!("File modified: {:?}", event.name);
                }
            }
        }
    }
}

用法

Cargo.toml 中包含它

[dependencies]
inotify = "0.11"

请参考 文档 和上面的示例,了解如何在代码中使用它。

请注意,inotify-rs 是对原始 inotify API 的相对低级封装。当然,它也是 Linux 特有的,就像 inotify 一样。如果您正在寻找一个更高级且平台无关的文件系统通知库,请考虑 notify

如果您需要以这种方式访问 inotify,而该封装不支持,请考虑使用 inotify-sys

文档

inotify-rs 最重要的文档是 API 参考文档,因为它包含了对完整 API 的详细描述以及示例。

更多示例可以在 示例目录 中找到。

请务必阅读 inotify 手册页。inotify 的使用可能很难正确,而此低级封装不会保护您免受所有错误的侵害。

许可证

版权所有(C)Hanno Braun 及其贡献者

在此特此授予任何人使用、复制、修改和/或出于任何目的分发本软件的权利,无论是否收费,前提是上述版权声明和本许可声明出现在所有副本中。

本软件按“原样”提供,作者放弃与该软件相关的所有保证,包括所有默示的适销性和适用性保证。在任何情况下,作者均不对任何特殊、直接、间接或后果性损害或任何因使用或性能本软件而产生的任何损害(无论基于合同、疏忽或其他侵权行为)负责,包括但不限于使用、数据或利润的损失。

依赖项

~0.1–8.5MB
~62K SLoC