Bash 如何在shell脚本中调用ioctl?

Bash 如何在shell脚本中调用ioctl?,bash,shell,ioctl,Bash,Shell,Ioctl,我试图在一个只有bash和基元实用程序的系统上执行ioctl调用 有没有办法对shell脚本中的/dev中的特定设备文件执行任意ioctl命令(如果参数只是整数),而无需编写C/perl/python程序?差不多 “magic_ioctl/dev/console 30 1 2”,它将调用“ioctl(open(“/dev/console”),30,1,2)”。为什么拒绝perl/c/python解决方案? 您可以通过perl一行程序实现这一点,如下所示: perl-e需要“sys/ioctl.p

我试图在一个只有bash和基元实用程序的系统上执行ioctl调用

有没有办法对shell脚本中的/dev中的特定设备文件执行任意ioctl命令(如果参数只是整数),而无需编写C/perl/python程序?差不多
“magic_ioctl/dev/console 30 1 2”,它将调用“ioctl(open(“/dev/console”),30,1,2)”。

为什么拒绝perl/c/python解决方案? 您可以通过perl一行程序实现这一点,如下所示:
perl-e需要“sys/ioctl.ph”;ioctl(…)

我写的
ioctl
工具正是为了这个目的:

目前,无法将多个参数传递给ioctl调用。你有没有一个有用的例子

如果您想调用
ioctl(open(“/dev/console”),30,1,您可以运行:

ioctl /dev/console 30 -v 1
然而,对于大多数ioctl,您需要分配一个缓冲区,并在ioctl调用的参数中传递指向该缓冲区的指针。在这种情况下,只需忘记
-v
ioctl
将从标准输入/输出读取/写入缓冲区内容<代码>ioctl
尝试从ioctl编号猜测缓冲区大小和方向

最好的方法是:
ioctl
理解许多(大约2200个)ioctl符号名。因此,您可以调用:

ioctl /dev/video0 VIDIOC_QUERYCAP > video_caps

您可以查看驱动程序是否具有sysfs接口。似乎您可以编写一个简单的C程序来实现这一点。能够在嵌入式设备上发出
ioctl
调用,例如init脚本(没有perl/python),而不必处理C程序的交叉编译/部署(脚本中只有一行!)那真的很方便。你在这方面做得更进一步了吗?这是有原因的。例如,在我的目标平台上,根本没有perl/python。为此目的创建一个C程序有点麻烦。我不想每次系统发生变化时都重新编译C。在我的android 2.3中的/system/bin/ioctl中可以找到类似命名的stock实用程序。@ogurets:interest,你知道这个实用程序的源代码在哪里吗?我想就是这个:如果你想在现有的文件描述符上运行ioctl而不打开怎么办?@AlexD确实,
ioctl
需要注意。下周我将做家务。