bash - ¿Cómo invocar ioctl en shell script?
(2)
¿Por qué rechazas las soluciones perl / c / python? Puede hacer esto con perl one-liner así: perl -e require "sys/ioctl.ph"; ioctl(...);
perl -e require "sys/ioctl.ph"; ioctl(...);
Estoy intentando ejecutar una llamada ioctl en un sistema con solo utilidades básicas bash y primitivas.
¿Hay alguna forma de ejecutar un comando ioctl arbitrario (si los parámetros son simplemente enteros) a un archivo de dispositivo específico en / dev en el script de shell, sin escribir programas C / perl / python? Algo como "magic_ioctl / dev / console 30 1 2" que llamaría "ioctl (open (" / dev / console "), 30, 1, 2);".
Escribí la herramienta ioctl
exactamente para este propósito: https://github.com/jerome-pouiller/ioctl .
Actualmente, no es posible pasar varios argumentos a la llamada ioctl. ¿Tienes un ejemplo en el que sería útil?
Si desea llamar a ioctl(open("/dev/console"), 30, 1);
, Tu puedes correr:
ioctl /dev/console 30 -v 1
Sin embargo, para la mayoría de ioctl, desea asignar un búfer y pasar un puntero a este búfer en argumento a la llamada ioctl. En este caso, simplemente olvide -v
. ioctl
leerá / escribirá el contenido del búfer desde / a la entrada / salida estándar. ioctl
intenta adivinar el tamaño y la dirección del búfer a partir del número ioctl.
Lo mejor es: ioctl
entiende muchos (alrededor de 2200) nombres simbólicos de ioctl. Así puedes llamar:
ioctl /dev/video0 VIDIOC_QUERYCAP > video_caps