2009-06-21 10 views
5

Monoフレームワークでioctlコマンドを実行しようとしていますが、探しているものが見つかりません。MonoでLinux ioctlを使用する

カーネルモジュールを持つDVBカードにコマンドを送信しようとしています。私は誰かがこれをどのようにして行うことができるかを明確に説明することができます。 Monoのカーネルモジュールを使った例は、私が推測すると便利だろう。

答えて

3

Mono.UnixにMonoには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; 
} 

A short mono mailing list discussion on the topicを。

2

ioctlはMono AFAIKではサポートされていません。 OS固有のパラメータやパラメータリストは、実際の要求に依存します。あなたはあなたの正確な呼び出しのためのラッパーライブラリを記述する必要がありDLLIMPORT

Interop with Native Libraries

2

を試みることができます。 Mono.Unixがどのようにアイデアを得るためにsyscalls(Mono.Unix Syscall.csのgoogle codesearch)をラップするかを見てください。次に、独自のデータ表現を使用する特定のioctlコマンドごとにラッパーを作成します。

ジッタによると、ioctl自体をDLLImportする必要があります。

1

私のsimilar questionをチェックし、後でsubjectに質問してください。この場合、私はVidel4Linuxインターフェイスをラップしようとしています。これはあなたにとって興味深いものです。

私は本当にそれらの示度を示唆しています。

関連する問題