25 个版本
0.0.27 | 2024 年 6 月 22 日 |
---|---|
0.0.25 | 2024 年 3 月 23 日 |
0.0.23 | 2023 年 11 月 14 日 |
0.0.20 | 2023 年 7 月 14 日 |
0.0.1 | 2020 年 5 月 31 日 |
2961 在 命令行工具 中
250 每月下载次数
用于 coreutils
590KB
12K SLoC
备注 / 待办事项
缺少的功能
--max-unchanged-stats
注意:存在 --max-unchanged-stats
的存根,因此可以使用它来运行 GNU 测试套件,但是这个标志还没有功能。
--follow
和 --retry
的平台支持
--follow=descriptor
,--follow=name
和 --retry
标志在 Linux(inotify 后端)上支持非常好。它们在 macOS/BSD(kqueue 后端)上工作得很好,但有些测试由于 kqueue 与 inotify 的不同工作方式而失败。理论上由于 notify-crate 对 ReadDirectoryChanges 的支持,Windows 上也存在支持,但是这些标志在 Windows 上完全没有测试。
注意:未记录的 ---disable-inotify
标志用于禁用 inotify 后端以测试轮询。但是 inotify 是仅限于 Linux 的后端,现在其他后端也支持轮询。因此,disable-inotify
现在是新的且更通用的标志名:--use-polling
的别名。
可能的优化
- 如果不使用
---f
并且输入是常规文件,则不需要读取整个文件。从末尾开始以块的形式读取,然后逐个块正向读取。 - 减少对例如
fstat
的系统调用次数 - 通过在适当的时候向
inotify_rm_watch
添加更多的系统调用来改进资源管理。
GNU 测试套件结果(9.1.8-e08752)
测试“gnu/tests/tail-2/follow-stdin.sh”的功能已实现。它失败了,因为它会触发关闭文件描述符的操作,使用 tail -f <&-
,作为解决方案,Rust的stdlib将关闭的FD重新打开为/dev/null
,这意味着uu_tail无法检测到这一点。有关讨论,请参阅: https://github.com/uutils/coreutils/issues/2873
测试“gnu/tests/tail-2/inotify-rotate-resources.sh”的功能已实现。它因为错误而失败,因为它使用 strace
来寻找对 inotify_add_watch
和 inotify_rm_watch
的调用,然而在uu_tail中,这些系统调用是从一个单独的线程调用的。如果GNU测试会跟踪线程,即使用 strace -f
,这个问题就可以解决。
有5个测试已修复,但在CI内部运行时(并不总是)会通过测试套件。这可能是与CI测试VM的负载/调度有关的原因。有疑问的测试是
-
tail-2/F-vs-rename.sh
-
tail-2/follow-name.sh
-
tail-2/inotify-rotate.sh
-
tail-2/overlay-headers.sh
-
tail-2/retry.sh
依赖项
~5–16MB
~206K SLoC