#ioctl #syscalls #posix #system #file-descriptor #command #io

ioctl-sys

POSIX 及以上系统的 IO 控制函数和宏 (核心函数和宏,见 ioctls 以获取许多 ioctl 定义)

9 个不稳定版本

使用旧的 Rust 2015

0.8.0 2022年2月28日
0.7.1 2021年3月17日
0.6.0 2020年11月17日
0.5.2 2017年3月17日
0.4.1 2016年8月17日

102 in Unix APIs

Download history 10809/week @ 2024-03-14 14699/week @ 2024-03-21 9952/week @ 2024-03-28 10075/week @ 2024-04-04 10838/week @ 2024-04-11 9358/week @ 2024-04-18 10122/week @ 2024-04-25 10532/week @ 2024-05-02 11453/week @ 2024-05-09 12402/week @ 2024-05-16 10666/week @ 2024-05-23 10746/week @ 2024-05-30 8607/week @ 2024-06-06 10459/week @ 2024-06-13 10780/week @ 2024-06-20 6793/week @ 2024-06-27

38,490 每月下载量
用于 63 个 crate (20 个直接使用)

MIT/Apache

14KB
361 行代码(不包括注释)

ioctl-sys & ioctls

ioctl-sys Crates.io ioctls Crates.io ioctl-sys ioctl-sys Documentation ioctls ioctls Documentation

用于在 Rust 中绑定 ioctl 的辅助工具。目前支持除 SPARC 和 Alpha 之外的所有架构上的 Linux。其他平台欢迎加入!

ioctl-sys crate 提供了一个基本接口来编写您自己的 ioctl 包装器。

ioctls crate 提供了一组 ioctls 的包装器。

这个库非常底层且复杂。使用 ioctl 不是一件有趣的事情。

ioctl 是什么?

ioctl 函数是 POSIX 系统上的抓包系统调用。不想添加新的系统调用?那就把它做成一个 ioctlioctl 既指系统调用,也指可以与它一起发送的命令。ioctl 代表 "IO 控制",命令总是发送到文件描述符。

这个库支持什么?

此库提供了ioctl!宏,用于绑定ioctl。它还尝试使用该宏将系统中支持的每个ioctl进行绑定,但许多ioctl需要一定程度的手动工作来支持(通常是通过提供struct或其他类型)而此库尚未支持。

此外,在etc中,有一些脚本用于从系统头文件中抓取ioctl定义,并生成对应的ioctl!调用。

如何获取魔数?

查看您的系统头文件。例如,/usr/include/linux/input.h包含许多使用_IOR_IOW_IOC_IORW的宏定义的行。这些宏对应于在此crate中定义的ior!iow!ioc!iorw!宏。此外,还有一个用于创建对ioctl的包装并使其类型更安全的ioctl!宏。

大多数ioctl没有或很少有文档。您需要通过源代码来了解它们的功能和使用方法。

如何确定ioctl的调用约定?

对于Linux,您必须查看内核中的ioctl处理程序以确定传递的值是如何被使用的。寻找copy_from_user()get_user()调用,这些调用将内存从用户空间复制过来,可能表明ioctl的arg是一个指针。在其他情况下,ioctl参数可能只是被转换成某种整数。

示例

use ioctl_sys::ioctl;

ioctl!(bad kiocsound with 0x4B2F);
ioctl!(none drm_ioctl_set_master with b'd', 0x1e);
ioctl!(read ev_get_version with b'E', 0x01; u32);
ioctl!(write ev_set_repeat with b'E', 0x03; [u32; 2]);

fn main() {
    let mut x = 0;
    let ret = unsafe { ev_get_version(0, &mut x) };
    println!("returned {}, x = {}", ret, x);
}

许可

许可如下之一

任选其一。

贡献

除非您明确声明,否则您有意提交以包含在作品中并由您定义的任何贡献,根据Apache-2.0许可,应如上双许可,不附加任何额外条款或条件。

无运行时依赖