8 个版本 (4 个重大更改)
0.5.0 | 2023 年 12 月 28 日 |
---|---|
0.4.0 | 2023 年 6 月 13 日 |
0.3.0 | 2021 年 2 月 28 日 |
0.2.0 | 2020 年 11 月 24 日 |
0.1.0 | 2020 年 10 月 31 日 |
在 文件系统 中排名第 103
每月 67,223 次下载
用于 56 个 Crates(其中 2 个直接使用)
23KB
367 行
Clircle
Clircle 提供了一个跨平台的 API,用于检测来自用户提供的参数中的读写循环。您可以从路径获取文件的重要标识符,以及对于所有三个 stdio 流,如果它们从文件或到文件管道,也是如此。
为什么?
想象一下,您想从几个文件中读取数据,并根据这些文件的包含内容输出某些内容。如果用户将程序的输出重定向到输入文件之一,您可能会陷入无限循环的读写。
该包提供了一个名为 Identifier
的结构体,它是一个平台相关的类型别名,因此您可以在所有平台上使用它,而无需自己引入任何条件编译。在 Unix 和 Windows 系统上,Identifier
包含用于在磁盘上标识文件的信息。
这两个结构体都实现了 Clircle
特性,并要求 clircle::Stdio
枚举和 &Path
需要 TryFrom
,以便所有可能的输入都可以表示为 Identifier
。最后,Clircle
是 Eq
的子特性,因此可以方便地比较标识符并检测循环。此外,clircle
包还提供了一些方便的函数,用于比较 Clircle
实现。
为什么我应该使用这个而不是 fs::Metadata
?
clircle
包通过单个 API 无缝地在 Linux 和 Windows 上运行,因此根本不需要条件编译。此外,MetadataExt
在 Windows 上尚未稳定,这意味着您需要自己挖掘 Windows API 以获取标识文件所需的信息。
这个包是从哪里来的?
这个crate起源于对bat
项目的拉取请求。工具bat
旨在成为Unix工具cat
的即插即用替代品。由于cat
会检测这些循环,因此bat
也需要这样做,这也是大部分代码的作用所在。然而,决定认为新的逻辑
- 对其他项目也有用,
- 并且过于特定于平台,不适合
bat
的范围。
所以现在,您也可以使用clircle
了!
依赖关系
~110–570KB