34

bash とプリミティブ ベース ユーティリティしかないシステムで ioctl 呼び出しを実行しようとしています。

C/perl/python プログラムを書かずに、任意の ioctl コマンド (パラメーターが単純な整数の場合) をシェル スクリプトで /dev の特定のデバイス ファイルに対して実行する方法はありますか? 「ioctl(open("/dev/console"), 30, 1, 2);」を呼び出す「magic_ioctl /dev/console 30 1 2」のようなもの。

4

2 に答える 2

13

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

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

を呼び出したい場合はioctl(open("/dev/console"), 30, 1);、次を実行できます。

ioctl /dev/console 30 -v 1

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

最良の方法はioctl、多く (約 2200) の ioctl シンボリック名を理解することです。したがって、次のように呼び出すことができます。

ioctl /dev/video0 VIDIOC_QUERYCAP > video_caps
于 2015-12-19T16:43:38.743 に答える
7

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

于 2011-11-27T22:41:59.300 に答える