Подтвердить что ты не робот

Как вызвать ioctl в оболочке script?

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

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

4b9b3361

Ответ 1

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

Ответ 2

Я написал инструмент 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