問題タブ [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.

0 投票する
0 に答える
673 参照

system - システムコールなしでユーザー空間からLinuxカーネルプロセスを「目覚めさせる」ことは可能ですか?

特別なハードウェアを管理するカーネル モジュールを変更しようとしています。ユーザー空間プロセスは、1 ミリ秒あたり 2 回の ioctl() システム コールを実行して、モジュールと通信します。これはリアルタイムの要件を満たしていません。これは、2 つの syscall の実行に時間がかかり、タイム スロットに収まらない場合があるためです。mmap を使用するとメモリ領域を共有できることはわかっていますが、これは素晴らしいことですが、 ioctl() を使用せずにデータ交換をモジュールと同期するにはどうすればよいでしょうか?

0 投票する
3 に答える
12669 参照

javascript - node.js でネットワーク インターフェイスのリストを取得する (ioctl SIOCGIFCONF)

私はノードを初めて使用し、 node_pcapを使用してノード アプリケーションをハッキングして、パケット データをキャプチャし、それを使用して興味深いことを行います。データをキャプチャするための入力の 1 つは、リッスンするネットワーク インターフェイス、つまり「eth0」です。

システムで使用可能なインターフェイスをプログラムで検索し、プログラムのユーザーに提示して、リッスンするインターフェイスを選択できるようにできれば、本当に素晴らしいと思いました。C では、SIOCGIFCONF を使用してioctl (または ioctlsocket と winsock) を使用します。

私の質問は、ノードでこれを行うメカニズムが現在存在するかどうかです。私はかなり検索しましたが、そのような解決策には達していません。

この機能が現在存在しない場合は、ioctl を使用して C/C++ でモジュール バインディングを記述してこれを実現できると思います。

お時間をいただきありがとうございます!

0 投票する
2 に答える
1668 参照

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) のみを受け取ります

0 投票する
1 に答える
2061 参照

linux - 複数のスレッドを使用して、同じファイル記述子で並列ポーリングと ioctl を実行できますか

疑似文字ドライバーの FD で 1 つのスレッドがポーリングするマルチスレッド アプリケーションがあります。他のスレッドが ioctl 呼び出しに同じ FD を使用できますか?

FDでepollを使用しています。

私の推測ではイエスです。誰かがこれを試したかどうか知りたいです。もしそうなら、結果は何ですか?

0 投票する
1 に答える
1705 参照

c - C でのソケットプログラミング用の ioctl()

ioctl() を使用して、ソケット プログラムでバッファ内の文字数を読み取ります。ただし、バッファの読み込みが遅れると、ioctl() によってメッセージの終わりとして誤って解釈されることがあります。着信メッセージの長さを知るために ioctl() を使用する場合、どうすればこれを回避できますか。また、受信するメッセージのサイズがわからないため、静的バッファー recv() で受信することはできません。

ありがとう、マノジ

0 投票する
1 に答える
1246 参照

c - freebsd での ioctl の実装

ioctlFreeBSD でキャラクターデバイス用のコマンドを実装する方法を知りたいです。私はすでにキャラクターデバイスを書いていますopen() close() read() write()が、どの引数を渡せばよいのかわかりませんioctl_handler。のプロトタイプを知っている人はいますd_ioctl_tか?

0 投票する
2 に答える
27898 参照

bash - シェルスクリプトでioctlを呼び出すには?

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

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

0 投票する
2 に答える
1640 参照

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

0 投票する
2 に答える
15925 参照

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 フィルター ドライバーを実装することができました)
0 投票する
1 に答える
1927 参照

python - Linux ターミナル バッファ内の余分な文字を確認する

Python で関数を実装しようとしましたがgetch()、F1-F12 や矢印キーなどの特殊キーの文字のリストも返す必要があります。これらの特別なキーは、連続して複数の文字を生成します。したがってgetch()、ブロッキング モードで 1 文字を読み取り、入力バッファに余分な文字があるかどうかを確認して、それらも取得する必要があります。

call をtermios.FIONREADioctlと共に使用して、入力バッファー内のバイト数を取得しています。バッファにスタックされた非特殊キーの押下をキャッチしますが、特殊キーからの余分な記号は見逃します。2 つの異なるバッファーがあるようです。誰かがこれを説明してくれたらうれしいです。

インタラクティブな例を次に示します。

sleep(1)途中注意。この秒が切れる前に 1 つのキーを押すと、出力は次のようになります。

1 秒間に 5 つの通常のキー (「asdfg」など) を入力すると、出力は次のようになります。

ただし、単一の矢印キーの場合、出力は次のようになります。

ここで 2 つの質問があります。

  1. 通常のキー押下でキュー内の 4 つのシンボルが破棄されるのはなぜですか? 「生」端末モードに切り替えたためですか?getch()端末を「生」モードのままにしなくても、後続の実行のために文字を保持するにはどうすればよいですか?

  2. ioctl特別なキーを 1 回押すだけのバッファが空になるのはなぜですか? それらのキャラクターは、その後のgetch()実行のためにどこから来ていますか? それらを確認する方法は?