問題タブ [ioctl]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
system - システムコールなしでユーザー空間からLinuxカーネルプロセスを「目覚めさせる」ことは可能ですか?
特別なハードウェアを管理するカーネル モジュールを変更しようとしています。ユーザー空間プロセスは、1 ミリ秒あたり 2 回の ioctl() システム コールを実行して、モジュールと通信します。これはリアルタイムの要件を満たしていません。これは、2 つの syscall の実行に時間がかかり、タイム スロットに収まらない場合があるためです。mmap を使用するとメモリ領域を共有できることはわかっていますが、これは素晴らしいことですが、 ioctl() を使用せずにデータ交換をモジュールと同期するにはどうすればよいでしょうか?
javascript - node.js でネットワーク インターフェイスのリストを取得する (ioctl SIOCGIFCONF)
私はノードを初めて使用し、 node_pcapを使用してノード アプリケーションをハッキングして、パケット データをキャプチャし、それを使用して興味深いことを行います。データをキャプチャするための入力の 1 つは、リッスンするネットワーク インターフェイス、つまり「eth0」です。
システムで使用可能なインターフェイスをプログラムで検索し、プログラムのユーザーに提示して、リッスンするインターフェイスを選択できるようにできれば、本当に素晴らしいと思いました。C では、SIOCGIFCONF を使用してioctl (または ioctlsocket と winsock) を使用します。
私の質問は、ノードでこれを行うメカニズムが現在存在するかどうかです。私はかなり検索しましたが、そのような解決策には達していません。
この機能が現在存在しない場合は、ioctl を使用して C/C++ でモジュール バインディングを記述してこれを実現できると思います。
お時間をいただきありがとうございます!
c - recv() の遅延
ソケットプログラミングを使用して通信する2つのプログラムがあります。最初に番号を指定します。相互にメッセージを交換する必要がある回数に関するホップ数。メッセージを受信するたびに、その ID が追加されます。したがって、文字列は毎回サイズが大きくなります。私のプログラムは 8000 ホップまで正常に動作していますが、8000 ホップを超えた後、プログラム p1 は長さ 16388 の文字列を送信しますが、p2 は、ソケットに 16385 しか読み取れないことを識別します。ioctl() を使用して、ソケットで recv() の準備ができている文字の量を決定し、それを char * 変数で recv します...
p1 の send() と p2 の recv() に遅延があるため、 p2 は socket で 16385 文字しか識別しないのでしょうか?
例: P1 が長さ (16388) を送信する場合
P2 は次の長さ (16385) のみを受け取ります
linux - 複数のスレッドを使用して、同じファイル記述子で並列ポーリングと ioctl を実行できますか
疑似文字ドライバーの FD で 1 つのスレッドがポーリングするマルチスレッド アプリケーションがあります。他のスレッドが ioctl 呼び出しに同じ FD を使用できますか?
FDでepollを使用しています。
私の推測ではイエスです。誰かがこれを試したかどうか知りたいです。もしそうなら、結果は何ですか?
c - C でのソケットプログラミング用の ioctl()
ioctl() を使用して、ソケット プログラムでバッファ内の文字数を読み取ります。ただし、バッファの読み込みが遅れると、ioctl() によってメッセージの終わりとして誤って解釈されることがあります。着信メッセージの長さを知るために ioctl() を使用する場合、どうすればこれを回避できますか。また、受信するメッセージのサイズがわからないため、静的バッファー recv() で受信することはできません。
ありがとう、マノジ
c - freebsd での ioctl の実装
ioctl
FreeBSD でキャラクターデバイス用のコマンドを実装する方法を知りたいです。私はすでにキャラクターデバイスを書いていますopen()
close()
read()
write()
が、どの引数を渡せばよいのかわかりませんioctl_handler
。のプロトタイプを知っている人はいますd_ioctl_t
か?
bash - シェルスクリプトでioctlを呼び出すには?
bash とプリミティブ ベース ユーティリティしかないシステムで ioctl 呼び出しを実行しようとしています。
C/perl/python プログラムを書かずに、任意の ioctl コマンド (パラメーターが単純な整数の場合) をシェル スクリプトで /dev の特定のデバイス ファイルに対して実行する方法はありますか? 「ioctl(open("/dev/console"), 30, 1, 2);」を呼び出す「magic_ioctl /dev/console 30 1 2」のようなもの。
encryption - Linux 2.6.18 SCSI SPIN および SPOUT SG_IO ioctl を sg LTO5 デバイスに
ヒューズファイルシステムでioctlを使用して、LTO5 デバイスのハードウェア暗号化を利用しようとしています。それは非常に簡単なはずです。cdb で io_hdr をセットアップします。
選択したアルゴリズムに従ってキーページを提供します。SG_IO ioctlを実行すると、すべて 0 の SCSI センスで 0 が返されます。
さて、ここからが奇妙になります。デバイスに書き込まれるデータは暗号化されません。テープを別のドライブに切り替えて SCSI 読み取りを行うと、データはすべてクリア テキストです。
したがって、次のステップは、SCSI SPIN コマンドを実行して、SPOUT コマンドが実行されたかどうかを確認することです。SPOUT の直後に、セキュリティ ステータス ページ (0x20) の SPIN を送信します。
ここでも、SG_IO ioctlからの値 0と、すべてゼロの意味を返します。ただし、返されるページは、ドライブに入れた SPOUT キー ページです。私が送信した秘密鍵がドライブに含まれているため、これはドライブから出てこなかったに違いありません。これは間違いなく SCSI 仕様です。ところで、私は両方の SCSI コマンドにまったく異なるバッファを使用し、適切な測定のために SPIN ページをゼロに memset します。sg ドライバーは、SPIN に応答してこのデータを提供します。
誰でもこの動作に光を当てることができますか?
Linux archive.xxxxx.xxx 2.6.18-274.7.1.el5 #1 SMP Thu Oct 20 16:21:01 EDT 2011 x86_64 x86_64 x86_64 GNU/Linux
sg3_utils-libs-1.25-5.el5
sgpio-1.2.0_10-2.el5
mt-st-0.9b-2.2.2
ioctlコマンドを /dev/sg5に送信しています。
Linux ioctl システム コールが SG_ERR_DID_ERROR [0x07] sg_io_hdr_t の host_status メンバのホスト アダプタで検出された内部エラーを返すことを発見しました。
setltokey.c コードもここにあります: http://www.circlesoft.com/setltokey.c
c++ - IOCTL を Windows デバイス ドライバーに送信する - CreateFile が失敗する
自分のコンピューター (win7 64 ビット) に接続されている PC/SC リーダーに IOCTL コマンドを送信したいと考えています。IOCTL コマンドを送信するには、デバイスに HANDLE が必要ですが、作成できません。
デバイスはデバイス マネージャーで「OMNIKEY 1021」としてリストされ、物理デバイス オブジェクト名は「\Device\USBPDO-15」です。Using the "WinObj" tool, I can detect 2 symlinks: USB#VID_076B&PID_1021#5&291f6990&0&1#{50dd5230-ba8a-11d1-bf5d-0000f805f530} USB#VID_076B&PID_1021#5&291f6990&0&1#{a5dcbf10-6530-11d2-901f-00c04fb951ed}
私の問題: CreateFile 関数を使用して、このデバイスへの有効なハンドルを作成できません。
MSDN/Google で、CreateFile 関数の lpFileName パラメータとして使用できるフォーマットをいくつか見つけましたが、どれも機能していないようです。
コードサンプル:
ノート:
- 返されるハンドルは常に無効です
- 常に管理者として実行されるため、権限は問題になりません
編集:
解決:
- PC/SC サービスはデバイスの排他的な所有権を取得するため、'CreateFile' を呼び出そうとすると常に失敗します。
- 解決策はカーネル スペース ドライバーです。これにより、IRP をドライバーに渡すことができます。(デバイスとの間で送受信されるデータを変更する KMDF フィルター ドライバーを実装することができました)
python - Linux ターミナル バッファ内の余分な文字を確認する
Python で関数を実装しようとしましたがgetch()
、F1-F12 や矢印キーなどの特殊キーの文字のリストも返す必要があります。これらの特別なキーは、連続して複数の文字を生成します。したがってgetch()
、ブロッキング モードで 1 文字を読み取り、入力バッファに余分な文字があるかどうかを確認して、それらも取得する必要があります。
call をtermios.FIONREADioctl
と共に使用して、入力バッファー内のバイト数を取得しています。バッファにスタックされた非特殊キーの押下をキャッチしますが、特殊キーからの余分な記号は見逃します。2 つの異なるバッファーがあるようです。誰かがこれを説明してくれたらうれしいです。
インタラクティブな例を次に示します。
sleep(1)
途中注意。この秒が切れる前に 1 つのキーを押すと、出力は次のようになります。
1 秒間に 5 つの通常のキー (「asdfg」など) を入力すると、出力は次のようになります。
ただし、単一の矢印キーの場合、出力は次のようになります。
ここで 2 つの質問があります。
通常のキー押下でキュー内の 4 つのシンボルが破棄されるのはなぜですか? 「生」端末モードに切り替えたためですか?
getch()
端末を「生」モードのままにしなくても、後続の実行のために文字を保持するにはどうすればよいですか?ioctl
特別なキーを 1 回押すだけのバッファが空になるのはなぜですか? それらのキャラクターは、その後のgetch()
実行のためにどこから来ていますか? それらを確認する方法は?