質問
Monoフレームワークを介してioctlコマンドを実行しようとしていますが、探しているものが見つかりません。
カーネルモジュールのあるDVBカードにコマンドを送信しようとしています。誰かがこれをどのように行うことができるかを明確にリンクまたは説明できることを願っています。カーネルモジュールを使用したMonoの例は、役に立つと思います。
解決
MonoにはMono.Unixのioctlのラッパーが含まれていません。これは、ioctl呼び出しパラメーターが大きく異なり、そのようなラッパーはほとんど役に立たないためです。必要なioctlごとに DllImport を宣言する必要があります。
Cで記述されたヘルパーライブラリはおそらく必要ありませんが、開発中に別のCプリプロセッサマクロの背後に隠されている実際の値を抽出するために必要になる場合があります。たとえば、Cヘッダーを展開するには:
#define FE_GET_INFO _IOR('o', 61, struct dvb_frontend_info)
このヘルパーをコンパイルして実行します:
#include <linux/dvb/frontend.h>
#include <stdio.h>
int main()
{
printf("const int FE_GET_INFO = %d;\n", FE_GET_INFO);
return 0;
}
他のヒント
ioctlはMono AFAIKではサポートされていません。 OS固有のパラメーターとパラメーターのリストは、実際の要求に依存します。 DLLImportを試すことができます
正確な呼び出し用のラッパーライブラリを作成する必要があります。 Mono.Unixがsyscallをラップする方法(Mono.Unix Syscall.csのGoogleコード検索)を見て、アイデアをつかんでください。次に、特定のioctlコマンドごとにラッパーを作成します。これは、独自のデータ表現を使用します。
ジッターが言ったように、ioctl自体をDLLImportする必要があります。
所属していません StackOverflow