libc_core/
ioctl.rs

1//! This module provides the `libc` types for IOCTL.
2//!
3//! MUSL: <https://github.com/bminor/musl/blob/c47ad25ea3b484e10326f933e927c0bc8cded3da/arch/generic/bits/ioctl.h#L11>
4//! TODO: Check ioctl command for multi architectures.
5
6use num_enum::TryFromPrimitive;
7
8#[derive(Debug, Eq, PartialEq, TryFromPrimitive)]
9#[repr(u32)]
10/// Teletype 设备相关 ioctl 命令,用于控制终端(如串口、TTY)行为。
11pub enum TermIoctlCmd {
12    // 用于 struct termios
13    /// 获取当前串口设置(termios 结构体)
14    TCGETS = 0x5401,
15    /// 立即设置串口配置(termios 结构体)
16    TCSETS = 0x5402,
17    /// 等待输出缓冲区刷新后再设置串口配置
18    TCSETSW = 0x5403,
19    /// 刷新输入输出缓冲区后设置串口配置
20    TCSETSF = 0x5404,
21
22    // 用于 struct termio(旧接口)
23    /// 获取当前串口设置(termio 结构体)
24    TCGETA = 0x5405,
25    /// 立即设置串口配置(termio 结构体)
26    TCSETA = 0x5406,
27    /// 等待输出缓冲区刷新后设置串口配置
28    TCSETAW = 0x5407,
29    /// 刷新输入输出缓冲区后设置串口配置
30    TCSETAF = 0x5408,
31
32    /// 获取当前终端的前台进程组 ID
33    TIOCGPGRP = 0x540F,
34    /// 设置当前终端的前台进程组 ID
35    TIOCSPGRP = 0x5410,
36
37    /// 获取终端窗口大小(通常与 struct winsize 搭配)
38    TIOCGWINSZ = 0x5413,
39    /// 设置终端窗口大小
40    TIOCSWINSZ = 0x5414,
41
42    /// 取消 `close-on-exec` 标志(在 `exec` 执行时文件描述符不会自动关闭)
43    FIONCLEX = 0x5450,
44    /// 设置 `close-on-exec` 标志(在 `exec` 执行时自动关闭文件描述符)
45    FIOCLEX = 0x5451,
46
47    /// 设置非阻塞 I/O(rustc 编译器也会用这个 ioctl 命令控制 pipe 行为)
48    FIONBIO = 0x5421,
49
50    /// 获取 RTC(实时时钟)的当前时间(用于 RTC 设备)
51    RTCRDTIME = 0x80247009,
52}