如何在shell脚本中调用ioctl?

Hun*_*Lin 30 bash shell ioctl

我正在尝试在只有bash和原始基础实用程序的系统上执行ioctl调用.

有没有办法在shell脚本中的/ dev中执行任意ioctl命令(如果params只是整数),而不编写C/perl/python程序?像"magic_ioctl/dev/console 30 1 2"这样的东西会调用"ioctl(open("/ dev/console"),30,1,2);".

Jér*_*ler 9

ioctl为此目的编写了工具:https://github.com/jerome-pouiller/ioctl.

目前,不可能将多个参数传递给ioctl调用.你有一个例子,它会有用吗?

如果你想打电话ioctl(open("/dev/console"), 30, 1);,你可以运行:

ioctl /dev/console 30 -v 1
Run Code Online (Sandbox Code Playgroud)

但是,对于大多数ioctl,您希望分配一个缓冲区并在ioctl调用的参数中将指针传递给此缓冲区.在这种情况下,请忘记-v.ioctl将从/向标准输入/输出读/写缓冲区内容.ioctl尝试从ioctl数字猜测缓冲区大小和方向.

最好的是:ioctl了解许多(约2200个)ioctl符号名称.因此你可以打电话:

ioctl /dev/video0 VIDIOC_QUERYCAP > video_caps
Run Code Online (Sandbox Code Playgroud)

  • 在我的 android 2.3 中的 /system/bin/ioctl 中找到了类似命名的 stock 实用程序。 (2认同)

小智 6

为什么拒绝perl/c/python解决方案?你可以通过perl one-liner这样做: perl -e require "sys/ioctl.ph"; ioctl(...);

  • 有原因.例如,在我的目标平台上,根本没有perl/python.为此目的创建一个C程序有点麻烦. (3认同)