使用旧的Rust 2015
0.3.4 |
|
---|---|
0.3.3 |
|
0.3.2 |
|
0.2.1 |
|
0.1.2 |
|
#77 in #魔法
83 每月下载次数
在 4 个crate中使用(通过kvm)
90KB
1K SLoC
ioctl
Rust中绑定ioctl
的辅助函数。目前支持除SPARC和Alpha之外的所有架构上的Linux。欢迎其他平台加入!
这个库非常底层且混乱。ioctl
并不有趣。
什么是ioctl
?
ioctl
函数是POSIX系统上的杂项系统调用。不想添加新的系统调用?就使用ioctl
!ioctl
既指系统调用,也指可以通过它发送的命令。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);
}