Как вызвать ioctl в сценарии оболочки? - PullRequest
29 голосов
/ 10 ноября 2011

Я пытаюсь выполнить вызов ioctl в системе только с утилитами bash и примитивной базой.

Есть ли способ выполнить произвольную команду ioctl (если параметры просто целые числа) для конкретного файла устройства в / dev в сценарии оболочки, без написания программ на C / perl / python? Что-то вроде "magic_ioctl / dev / console 30 1 2", которая вызывает "ioctl (open (" / dev / console "), 30, 1, 2);".

Ответы [ 2 ]

7 голосов
/ 19 декабря 2015

Я написал ioctl инструмент именно для этой цели: https://github.com/jerome-pouiller/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
6 голосов
/ 28 ноября 2011

Почему вы отказываетесь от решений perl / c / python?Вы можете сделать это с помощью perl one-liner: perl -e require "sys/ioctl.ph"; ioctl(...);

...