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}