Mono フレームワークで ioctl コマンドを実行しようとしていますが、探しているものが見つかりません。
カーネル モジュールを持つ DVB カードにコマンドを送信しようとしています。誰かがこれを行う方法を明確にリンクまたは説明できることを願っています。カーネル モジュールを使用した 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;
}
正確な呼び出しのためにラッパーライブラリを作成する必要があります。アイデアを得るために、Mono.Unixがシステムコール(Mono.Unix Syscall.csのグーグルコード検索)をどのようにラップするかを見てください。次に、データの独自の表現を使用する特定のioctlコマンドごとにラッパーを作成します。
ジッタが言ったように、ioctl自体をDLLImportする必要があります。
ioctl は Mono AFAIK ではサポートされていません。あまりにも OS 固有で、パラメーター リストは実際の要求に依存します。DLLImport を試すことができます
Check for my similar question, and later question on the subject. In this case I'm trying to wrap the Videl4Linux interface, that could be of interest for you.
I really suggest those readings.