2009-06-21 6 views
5

Ich versuche, ioctl Befehl über Mono-Framework zu tun, aber ich kann nicht finden, was ich suche.Verwenden von Linux ioctl mit Mono

Ich versuche, Befehl an eine DVB-Karte zu senden, die ein Kernelmodul hat. Ich hoffe, jemand kann verlinken oder erklären, wie das gemacht werden kann. Jedes Beispiel mit Mono, das Kernel-Module verwendet, wäre nützlich, denke ich.

Antwort

3

Mono enthält keinen Wrapper für ioctl in Mono.Unix, da ioctl-Aufrufparameter stark variieren und ein solcher Wrapper fast nutzlos wäre. Sie sollten eine DllImport für jedes benötigte ioctl deklarieren.

Sie benötigen wahrscheinlich keine in C geschriebene Hilfsbibliothek, Sie benötigen diese jedoch möglicherweise während der Entwicklung, um tatsächliche Werte zu extrahieren, die sich hinter verschiedenen C-Präprozessormakros verbergen.

#define FE_GET_INFO    _IOR('o', 61, struct dvb_frontend_info) 

Kompilierung und führen Sie diesen Helfer:

#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 Zum Beispiel C-Header zu erweitern.

2

ioctl wird von Mono AFAIK nicht unterstützt. Too OS-spezifische und Parameterliste hängt von der tatsächlichen Anfrage ab. Sie könnten versuchen, DLLImport

Interop with Native Libraries

2

Sie sollten eine Wrapper-Bibliothek für Ihre genaue Anrufe schreiben. Sehen Sie sich an, wie Mono.Unix syscalls (Google-Codesuche für Mono.Unix Syscall.cs) umschließt, um die Idee zu bekommen. Erstellen Sie dann einen Wrapper für jeden spezifischen ioctl-Befehl, der Ihre eigene Darstellung der Daten verwendet.

Wie Jitter sagte - Sie müssen DLLImport der ioctl selbst.

1

Überprüfen Sie für meine similar question, und später Frage an die subject. In diesem Fall versuche ich, die Videl4Linux-Schnittstelle einzubinden, die für Sie von Interesse sein könnte.

Ich empfehle wirklich diese Messwerte.