Module std::os::unix::io1.0.0[][src]

This is supported on Unix only.
Expand description

特定于 Unix 的通用 I/O 原语扩展。

就像裸指针一样,原始文件描述符指向具有动态生命周期的资源,如果它们比它们的资源生命周期更长,它们可以悬垂,如果它们是由无效值创建的,则它们可以被伪造。

该模块提供了三种用于表示文件描述符的类型,具有不同的所有权属性:原始、借用和拥有,类似于用于表示指针的类型:

TypeAnalogous to
RawFd*const _
BorrowedFd<'a>&'a _
OwnedFdBox<_>

和裸指针一样,RawFd 值是原始值。 并且在新代码中,他们应该被认为是不安全的 (类似于解引用他们)。Rust 并不总是提供此指导,因此 Rust 生态系统中的现有代码通常不会将 RawFd 的使用标记为不安全。 一旦 io_safety 特性稳定,将鼓励库迁移,通过将 unsafe 添加到解引用 RawFd 值的 API,或者使用 BorrowedFdOwnedFd 代替。

与引用一样,BorrowedFd 值与生命周期相关联,以确保它们的生命周期不会超过它们指向的资源。这些可以安全使用。BorrowedFd 值可用于提供对任何系统调用的安全访问的 API 中,除了:

  • close,因为这将结束资源的动态生命周期,而不结束文件描述符的生命周期。
  • dup2/dup3,在第二个参数中,因为这个参数被关闭并分配了一个新的资源,这可能会破坏其他代码使用该文件描述符的假设。 此列表不包括 mmap,因为 mmap 确实对其文件描述符参数进行了适当的借用。也就是说,mmap 是不安全的还有其他原因:它在裸体疗法上运行,如果底层存储发生可变,它可能会有未定义的行为。

可变的可能来自其他进程,或者来自同一进程,如果 API 提供 BorrowedFd 访问,因为如前所述,BorrowedFd 值可能用于提供对任何系统调用的安全访问的 API。 因此,使用 mmap 并提供安全 API 的代码必须全权负责确保安全的 Rust 代码不会通过它引起未定义的行为。

与 box 一样,OwnedFd 在概念上拥有它们指向的资源,并在它们被丢弃时释放 X1X。

Structs

BorrowedFdExperimental

借用的文件描述符。

OwnedFdExperimental

拥有所有权的文件描述符。

Traits

AsFdExperimental

一个 trait 来借用来自底层对象的文件描述符。

一个从底层对象中提取原始文件描述符的 trait。

一个表示从原始文件描述符构造对象的能力的 trait。

一个 trait,表示消费对象并获得其原始文件描述符所有权的能力。

Type Definitions

原始文件描述符。