我尝试做一个ioctl()
从 bash 拨打电话。这在 C 语言中很容易做到,所以有工具(https://github.com/jerome-pouiller/ioctl) 包装了这个功能。
但这会使我的脚本的分发变得更加困难,因为我必须连同它一起分发该工具。
Debian APT 存储库中是否已经包含任何其他工具可以执行相同的操作?这样我就可以apt install
从脚本中做一个简单的事情?
答案1
系统ioctl
调用采用的参数列表根据请求的不同而有很大差异。许多请求将结构化数据作为输入或生成结构化数据作为输出。这使得从 shell 中使用起来很尴尬。当然,有一些命令围绕特定的 ioctl 请求或特定的集合(例如stty
使用终端 ioctl),但不是通用命令。您链接到的工具允许传入和传出二进制数据,但从 shell 操作该数据很困难。
我建议使用更高级的脚本语言(例如 Perl 或 Python)编写程序。这使得部署变得更容易,因为人们不需要一个晦涩的工具:大多数类 Unix 系统都有 Perl,现在大多数也有 Python。
Perl 有一个预定义的ioctl
功能并通过 提供对请求值的至少一些符号名称的访问sys/ioctl.ph
。我不知道你应该如何列出可用的符号名称。额外的输入/输出可作为标量(即字节字符串)使用。
Python 有一个ioctl
功能在fnctl
模块中。这termios
module 为终端相关的 ioctl 定义了一些符号名称。额外的输入/输出可以作为整数或字节字符串传递。
在 Python 中,另一种方法可能是ctypes
模块,这是从高级语言调用 C 函数的一种非常好的方法。如果您要调用的 ioctl 被定义为将结构体作为输入或输出,那就太好了,因为 ctypes 允许您以 C 编译器布置结构体的方式访问结构体,而无需担心数据类型大小、填充、字节顺序等。