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