2009-06-21 10 views
5

J'essaie de faire la commande ioctl via le framework Mono, mais je ne trouve pas ce que je cherche. J'essaye d'envoyer la commande à une carte DVB qui a un module de noyau. J'espère que quelqu'un peut lier ou expliquer clairement comment cela peut être fait. Tout exemple avec Mono utilisant des modules du noyau serait utile je suppose.Utilisation de Linux ioctl avec Mono

Répondre

3

Mono ne contient pas de wrapper pour ioctl dans Mono.Unix, car les paramètres d'appel ioctl varient considérablement et un tel wrapper serait presque inutile. Vous devez déclarer un DllImport pour chaque ioctl dont vous avez besoin.

Vous n'avez probablement pas besoin d'une bibliothèque auxiliaire écrite en C, cependant, vous pourriez en avoir besoin pendant le développement pour extraire les valeurs réelles cachées derrière les différentes macros du préprocesseur C. Par exemple, pour développer en-tête C:

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

compiler et exécuter cette aide:

#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 n'est pas pris en charge par Mono AFAIK. Trop spécifique au système d'exploitation et la liste des paramètres dépend de la demande réelle. Vous pouvez essayer DLLImport

Interop with Native Libraries

2

Vous devez écrire une bibliothèque wrapper pour vos appels précis. Regardez comment Mono.Unix enveloppe les syscalls (google codesearch pour Mono.Unix Syscall.cs) pour avoir l'idée. Créez ensuite un wrapper pour chaque commande ioctl spécifique, qui utilise votre propre représentation des données. Comme l'a dit jitter - vous aurez besoin de DLLImport l'ioctl lui-même.

1

Vérifiez mon similar question, et une question plus tard sur le subject. Dans ce cas, j'essaie d'envelopper l'interface Videl4Linux, qui pourrait vous intéresser.

Je suggère vraiment ces lectures.