問題タブ [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 投票する
1 に答える
7386 参照

linux - Linux: /dev/random で利用可能な 0 バイトを返す ioctl/FIONREAD?

ファイル記述子fdを開いて /dev/random のその他のサニティ チェックを行った後、デバイスから読み取り可能なバイト数を読み取ろうとしています。これにより、プログラムで必要な場合にこの量を引き出すことができます。

私の基本的なコードはこれです:

どのようなシナリオ (必要な場合は root または通常のユーザー) であっても、常に読み取り可能な 0 バイトを返します。

これは、デバイスから取り出すことができるものを取得する方法であると以前に提案されましたが、プログラムで発生する可能性のある問題や障害によって、常にゼロが返されることを知っていますか? 私がやりたいことを行う他の方法を知っていますか?

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

winapi - IOCTL_MOUNTDEV_QUERY_UNIQUE_ID の一意性

のドキュメントIOCTL_MOUNTDEV_QUERY_UNIQUE_IDは少し混乱しています...構造体で返されるIDの種類は正確ですか?MOUNTDEV_UNIQUE_ID

のドキュメント

言います:

UniqueIdLength

  • 一意のボリューム ID の長さが含まれます。

UniqueId

  • 一意のボリューム ID が含まれます。一意のボリューム名の形式は です"\??\Volume{GUID}\"。GUID は、ボリュームを識別するグローバルに一意の識別子です。

ただし、ここには奇妙なことがあります: の正確な形式はUniqueId何ですか? \??\Volume{GUID}\それがフォーマットであることが意図されている場合、UniqueIdLengthフィールドのポイントは何ですか-それらはすべて同じサイズではありませんか? それ以外の場合、デバイス ID はどのような形式にする必要がありますか?

さらに、これはデバイスID ですか、それともボリュームID ですか? つまり、これはメディアごと(CD など) またはデバイス(CD ドライブ) ごとに一意であると考えられますか?

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

ubuntu-10.04 - カーネルモードとユーザーモード間のioctl通信の使用

ioctlを使用してカーネルモジュールと通信したい。1つはカーネルモジュール用、もう1つはユーザーモード用の2つのcプログラムを作成しました。カーネルモジュールのコンパイル中にこのエラーが発生します:

エラー:初期化子で指定された不明なフィールド'ioctl'

この行で:

なぜこれが起こっているのか考えてみてください。

ありがとう

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

c - ソケットにバインドするためのユーザー モード権限が拒否されました

Linux マシンのユーザー モード [非ルート] で、 を使用してソケットをバインドしようとしていioctl(iInterfaceSocket, SIOCSIFADDR, &stCommand)ます。私は得てerror 13 -> Permission denied because of user modeいます。ユーザーモードからカーネルモードに変更すると、すべて正常に動作します。

ユーザーモードでのみソケットをバインドする必要があります。上記の問題を説明しながら解決策を提案してください。情報を見逃した場合はお知らせください。詳細情報を提供します。

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

linux-kernel - ブロックデバイスドライバーの「lock_kernel」を置き換えるのを手伝ってくれる人はいますか?

この投稿をご覧いただきありがとうございます。ネットワーク ブロック デバイス ドライバーにパッチを適用しようとしています。ソースを確認する必要がある場合は、http://code.ximeta.com にあります。

Linux 2.6.37 で lock_kernel() が非推奨になっていることに気付きました。「ioctl() の新しい方法」を読んだところ、デバイス ドライバは動作前に特定のロックを実行する必要があることがわかりました。

可能であれば、これに代わるアドバイスをお願いします。

ブロック フォルダー セクションで、関連していると思われる現在のコードの 2 つのセクションを見つけました。

ご参考までに、それぞれの抜粋を載せておきます。

io.c には、lock_kernel への 1 つの呼び出しが含まれています。

また、ctrldev.c にはメインの io 関数が含まれています。

後の ndas_ctrldev_ioctl 関数は、以前の .ioctl として設定されます。

これを変換して、lock_kernel(); を使用しないようにします。

私の理解によると、以前のセクションを以下のように変更します。

そこで、以下のアドバイスをお願いします。

  1. これは正しい手順のように見えますか?

  2. ロックを io 関数に移動するのは正しいことを理解していますか?

  3. crtrldev.c のインクルードに基づいて、頭のてっぺんからロックをお勧めできますか? (filp と lock_kernel を扱う他のドライバーをいくつか調べてみましたが、初心者すぎてすぐに答えを見つけることができませんでした。)

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

linux - strace 以外に iotcl 呼び出しを記録する方法はありますか?

関数を呼び出すときに特定の ioctl 呼び出しが呼び出されるかどうかを確認しようとしています (これは Linux 上にあります)。カーネルにこの種のデータをログに書き込む方法はありませんか?

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

c - 複数のインターフェイスを持つデバイスの MTU を設定する

私は使っている

ioctl(s, SIOCSIFMTU, (caddr_t)&ifr)

インターフェイスの MTU を変更します。

コードはこれに似ています

私の問題は、デバイスに複数のインターフェイスがあり、これらすべての MTU が 1492 に設定されていることです。他のすべてのインターフェイスに影響を与えないようにして、1 つのインターフェイスのみに限定して実行したいと考えています。どうすればいいですか?

bond1:43 Link encap:Ethernet HWaddr 00:0E:0C:E4:C5:45
inet addr:10.7.181.59 Bcast:10.7.181.255 Mask:255.255.255.0 UP BROADCAST RUNNING MASTER MULTICAST MTU: 1492 Metric:1

bond1:48 Link encap:Ethernet HWaddr 00:0E:0C:E4:C5:45
inet addr:10.7.181.60 Bcast:10.7.181.255 Mask:255.255.255.0 UP BROADCAST RUNNING MASTER MULTICAST MTU: 1492 Metric:1

bond1:49 Link encap:Ethernet HWaddr 00:0E:0C:E4:C5:45
inet addr:10.7.181.61 Bcast:10.7.181.255 Mask:255.255.255.0 UP BROADCAST RUNNING MASTER MULTICAST MTU: 1492 Metric:1

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

linux-kernel - pppd がダイヤル プロセスでスタックする

複数の USB モデムを Ubuntu に接続しています。
uname -a
Linux devlp 2.6.32-28-generic #55-Ubuntu SMP Mon Jan 10 21:21:01 UTC 2011 i686 GNU/Linux
pppd version: 2.4.5

私は 8 台のシエラ ワイヤレス モデムでテストを行っていますが、それらはすべて接続され、動作しています。それぞれに「ppp」インターフェースがあります。
それらが接続された後、私は ppp7 を再接続しようとしていますが、最初は pppd が失敗し、2 回目の試行で、「シリアル接続が確立されました」と表示されてスタックします。pppd を強制終了するためにすべての強制終了シグナルを試みましたが、成功しませんでした。終了させる唯一の方法は、ダイヤルしようとしたモデムを取り外すことです。
pppd が動かなくなる正確な場所を探したところ、ここにありました。

問題は特に ppp7 にあるようです - どのモデムでもかまいませんので、モデムの問題ではないと思いますが、そのコマンドで実際に何が起こっているのかわかりませんか? 答えは誰の責任?カーネルだけですか?モデムドライバー?モデム自体?PPPIOCGCHAN のドキュメントは非常に貧弱なので、その情報をどうするかよくわかりません..

最初は pppd が切断後にチャネルまたは ppp を解放していないのではないかと思ったので、自分の pppd バージョンをコンパイルし、PPPIOCDISCONN と PPPIOCDETACH を追加して、自分のバージョンが問題ないことを確認しましたが、結果は同じでした。
あなたが思うこと?

0 投票する
4 に答える
57600 参照

c - Linux - FIONREAD が常に 0 の ioctl

TCP ソケットで読み取り可能なバイト数を知りたいと思っています。私はフラグ「FIONREAD」を指定して ioctl を呼び出しています。これにより、実際にこの値が得られるはずです。関数を呼び出すと、 return val 0 (したがって Error はありません) として取得されますが、整数引数も値 0 を取得します。それは問題ありませんが、recv() メソッドを呼び出すと、実際にソケットからいくつかのバイトを読み取ります。私は何を間違っていますか?

// ここにいくつかのコード:

recv 関数を呼び出すと、実際にいくつかの有効なデータを読み取りました (これは期待していました)。

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

android - Androidioctl-ルート権限と使用法

Androidアプリでいくつかのルーティング機能に取り組んでおり、ioctlにアクセスする必要があります。ioctlを使用するアプリを実行するにはroot権限が必要なため、アプリを呼び出すことができる唯一の方法は、別の実行可能ファイルをリンクし、Javaからを使用して呼び出すことRuntime.getRuntime().exec()です。

別の実行可能ファイルを作成せずに、AndroidのJNIからroot権限にアクセスする方法はありますか?実行可能ファイルを構築することは、ioctlにアクセスするための最良のアプローチですか?