質問

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する必要があります。

私の同様の質問を確認し、後で件名。この場合、私はVidel4Linuxインターフェースをラップしようとしています。それはあなたにとって興味があるかもしれません。

これらの測定値をお勧めします。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top