web-dev-qa-db-ja.com

シェルスクリプトでioctlを呼び出す方法は?

私は、bashとプリミティブの基本ユーティリティのみを備えたシステムでioctl呼び出しを実行しようとしています。

C/Perl/pythonプログラムを書かずに、シェルスクリプトの/ devにある特定のデバイスファイルに対して任意のioctlコマンドを実行する方法はありますか? " magic_ioctl/dev/console 30 1 2 "は、" ioctl(open( "/ dev/console")、30、1、2); "を呼び出します。

31
Hung-Te Lin

私はこの目的のためにioctlツールを正確に書きました: https://github.com/jerome-pouiller/ioctl

現在、ioctl呼び出しに複数の引数を渡すことはできません。それが役立つ例はありますか?

ioctl(open("/dev/console"), 30, 1);を呼び出す場合は、次のコマンドを実行できます。

ioctl /dev/console 30 -v 1

ただし、ほとんどのioctlでは、バッファーを割り当て、このバッファーへのポインターをioctl呼び出しの引数に渡します。この場合は、-vioctlは、標準入出力のバッファーコンテンツを読み書きします。 ioctl ioctl番号からバッファサイズと方向を推測してみてください。

最良のものは次のとおりです:ioctl多くの(約2200)ioctl記号名を理解します。したがって、次のように呼び出すことができます。

ioctl /dev/video0 VIDIOC_QUERYCAP > video_caps
8
Jezz

なぜPerl/c/pythonソリューションを拒否するのですか?これは、次のようにPerlの1行で作成できます。Perl -e require "sys/ioctl.ph"; ioctl(...);

6
Sergey Beduev