使用旧的Rust 2015

0.3.4 2017年5月28日
0.3.3 2015年7月21日
0.3.2 2015年5月31日
0.2.1 2015年5月29日
0.1.2 2015年5月26日

#77 in #魔法

Download history 21/week @ 2024-03-03 27/week @ 2024-03-10 24/week @ 2024-03-17 10/week @ 2024-03-24 57/week @ 2024-03-31 17/week @ 2024-04-07 25/week @ 2024-04-14 24/week @ 2024-04-21 18/week @ 2024-04-28 16/week @ 2024-05-05 17/week @ 2024-05-12 22/week @ 2024-05-19 17/week @ 2024-05-26 26/week @ 2024-06-02 13/week @ 2024-06-09 25/week @ 2024-06-16

83 每月下载次数
4 个crate中使用(通过kvm

BSL-1.0/Apache-2.0

90KB
1K SLoC

Rust 771 SLoC // 0.4% comments Python 234 SLoC // 0.0% comments

ioctl

Travis Crates.io

文档

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

这个库非常底层且混乱。ioctl并不有趣。

什么是ioctl

ioctl函数是POSIX系统上的杂项系统调用。不想添加新的系统调用?就使用ioctlioctl既指系统调用,也指可以通过它发送的命令。ioctl代表“IO控制”,命令总是发送到文件描述符。

这个库支持什么?

这个库提供了ioctl!宏,用于绑定ioctl。它还尝试使用该宏绑定系统支持的每个ioctl,但许多ioctl需要一些手动工作来支持(通常是通过提供结构体或其他类型),而这本库尚不支持。

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

如何获取魔法数字?

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

大多数 ioctl 缺乏或仅有很少的文档。您需要仔细查阅源代码以了解它们的功能以及如何使用它们。

示例

#[macro_use]
extern crate 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);
}

无运行时依赖