#文件描述符 #操作系统

close_fds

一个易于关闭所有打开文件描述符的库

7个版本

0.3.2 2021年6月5日
0.3.1 2021年2月26日
0.3.0 2021年1月3日
0.2.2 2020年9月13日
0.1.0 2020年8月10日

#222 in Unix APIs

Download history 3462/week @ 2024-03-14 4088/week @ 2024-03-21 3835/week @ 2024-03-28 3519/week @ 2024-04-04 3655/week @ 2024-04-11 4404/week @ 2024-04-18 3528/week @ 2024-04-25 4133/week @ 2024-05-02 3082/week @ 2024-05-09 2849/week @ 2024-05-16 2795/week @ 2024-05-23 2287/week @ 2024-05-30 2798/week @ 2024-06-06 3091/week @ 2024-06-13 3201/week @ 2024-06-20 2560/week @ 2024-06-27

12,096 monthly downloads
用于 10 crates (4 directly)

MIT 许可证

79KB
1.5K SLoC

close_fds

crates.io Docs GitHub Actions Cirrus CI codecov

一个小的Rust库,可以轻松关闭所有打开的文件描述符。

用法

在您的 Cargo.toml 中添加

[dependencies]
close_fds = "0.2"

在您的应用程序中

use close_fds::close_open_fds;

fn main() {
    // ...
    unsafe {
        close_open_fds(3, &[]);
    }
    // ...
}

重要:请阅读 close_open_fds() 的文档,了解为什么它是 unsafe 的。

close_open_fds() 的第一个参数是要关闭的最低文件描述符;小于此文件描述符的所有文件描述符都将保持打开状态。第二个参数是一个包含应该保持打开状态的其他文件描述符列表的切片。(注意:如果此列表已排序,特别是如果列表长度超过几个元素,则 close_open_fds() 将更加高效。)

close_open_fds() 总是 成功。如果关闭文件描述符的一种方法失败,它将回退到另一种方法。

更多详细信息以及其他有用的函数可以在 文档 中找到。

操作系统支持

close_fds 有两个操作系统支持等级,类似于 Rust 的支持等级

第一级:“保证可用”(在CI中测试过)

  • Linux(glibc和musl)
  • macOS
  • FreeBSD

第二级:“保证构建”(在CI中构建,但未测试)

  • NetBSD
  • OpenBSD
  • DragonflyBSD
  • Solaris
  • Illumos

注意:如 许可证 所述,close_fds 不提供任何保证。

操作系统特定说明

以下是此crate将在各种平台上尝试的方法列表,以提高列出打开文件描述符时的性能

  • Linux
    • /proc/self/fd 如果 /proc 已挂载(非常高效)
  • macOS
    • /dev/fd(非常高效)
  • FreeBSD
    • /dev/fd 如果在那里挂载了 fdescfs(非常高效)
    • 通过 kern.proc.nfds 系统调用获取打开文件描述符的数量(除非大量文件描述符打开,否则效率中等;"线程安全"函数或关闭文件描述符时不会使用)
  • OpenBSD
    • 使用 getdtablecount() 获取打开文件描述符的数量(除非大量文件描述符打开,否则效率中等;"线程安全"函数或关闭文件描述符时不会使用)
  • NetBSD
    • /proc/self/fd 如果 /proc 已挂载(非常高效)
    • 使用 fcntl(0, F_MAXFD) 获取最大打开文件描述符(效率中等)
  • Solaris 和 Illumos
    • 如果可用,则使用 /dev/fd/proc/self/fd(非常高效)

在关闭文件描述符或设置 close-on-exec 标志时,此库还可能在 BSDs 上调用 closefrom(),或在 Linux 5.9+/FreeBSD 12.2+ 上调用 close_range(),这两个方法都非常高效。

如果上述方法都不可用,它将回退到遍历所有可能的文件描述符编号的简单循环——从 minfdsysconf(_SC_OPEN_MAX)。这很慢,但总是有效。

注意:最常见的用法,close_open_fds(3, &[]),在 Linux(挂载 /proc 或内核 5.9+)、macOS、所有 BSD 和 Solaris/Illumos 上都非常高效。

依赖项