25 个稳定版本 (11 个主要版本)

14.0.2 2024 年 8 月 22 日
14.0.1 2024 年 7 月 23 日
14.0.0 2024 年 5 月 22 日
13.1.1 2024 年 3 月 14 日
3.0.2 2023 年 2 月 17 日

#37 in 文件系统

Download history 117222/week @ 2024-05-02 121717/week @ 2024-05-09 112544/week @ 2024-05-16 119099/week @ 2024-05-23 119844/week @ 2024-05-30 116763/week @ 2024-06-06 119526/week @ 2024-06-13 114893/week @ 2024-06-20 108611/week @ 2024-06-27 109220/week @ 2024-07-04 110659/week @ 2024-07-11 113420/week @ 2024-07-18 126135/week @ 2024-07-25 115527/week @ 2024-08-01 118054/week @ 2024-08-08 113028/week @ 2024-08-15

493,261 每月下载量
232 个 Crates 中使用 (7 直接使用)

MIT/Apache

75KB
1.5K SLoC

使用 tempfiles 以原子方式在信号安全的方式下准备覆盖或创建新内容的新文件,以最小化资源泄漏的风险。

Tempfiles 也可以用作锁,因为同一时间只有一个 tempfile 可以存在于给定路径。

  • 注册的临时文件在进程终止或丢弃时自动删除
    • 写入临时文件并在新名称下持久化
    • 关闭临时文件以将其转换为标记并节省系统资源
    • 使用已关闭的临时文件标记路径
  • 持久化临时文件以防止其消失。
  • gix 的信号处理器集成,在进程终止前清理锁文件。
  • 由于实现了 std::io 特性,可以透明地使用临时文件

lib.rs:

在典型终止信号终止时移除的 git 风格注册的临时文件。

在创建第一个 tempfile 之前,调用 [gix_tempfile::signal::setup(Default::default())][signal::setup()] 来注册信号处理器。

信号处理器由 signal-hook 驱动,以便在应用被告知关闭时通知,确保临时文件被删除。删除是通过进程 ID 过滤的,以允许子进程有自己的临时文件集合,这些临时文件在父进程退出时不会被删除。

初始设置

由于没有安装 TERMination 处理器,必须在创建第一个 tempfile 之前调用 [signal::setup()]。这也允许在应用控制下控制该 crate 如何与其他处理器集成。

一般来说,可以使用Default::default()作为参数来模拟默认行为,并在清理临时文件后终止进程。更多关于选项的信息,请参阅signal::handler::Mode

限制

临时文件可能仍然存在于磁盘上

  • 收到不可中断的信号,如SIGKILL
  • 当信号到来时,应用程序正在对临时文件执行写操作,这阻止了删除该临时文件,但不会阻止其他文件。任何其他与临时文件相关的操作都会遇到相同的问题。

功能标志

依赖

~3–12MB
~189K SLoC