bash shell ioctl

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