Utilizzando Linux ioctl con Mono
Domanda
Sto cercando di eseguire il comando ioctl tramite il framework Mono, ma non riesco a trovare quello che sto cercando.
Sto cercando di inviare un comando a una scheda DVB che ha un modulo kernel. Spero che qualcuno possa collegare o spiegare chiaramente come si può fare. Qualsiasi esempio con Mono che utilizza i moduli del kernel sarebbe utile immagino.
Soluzione
Mono non contiene un wrapper per ioctl in Mono.Unix, poiché i parametri di chiamata ioctl variano notevolmente e un tale wrapper sarebbe quasi inutile. Dovresti dichiarare un DllImport per ogni ioctl di cui hai bisogno.
Probabilmente non hai bisogno di una libreria di supporto scritta in C, tuttavia, potresti averne bisogno durante lo sviluppo per estrarre i valori effettivi nascosti dietro diverse macro di preprocessore C. Ad esempio, per espandere l'intestazione C:
#define FE_GET_INFO _IOR('o', 61, struct dvb_frontend_info)
compila ed esegui questo helper:
#include <linux/dvb/frontend.h>
#include <stdio.h>
int main()
{
printf("const int FE_GET_INFO = %d;\n", FE_GET_INFO);
return 0;
}
Altri suggerimenti
ioctl non è supportato da Mono AFAIK. Troppo specifico del sistema operativo e l'elenco dei parametri dipende dalla richiesta effettiva. Puoi provare DLLImport
Dovresti scrivere una libreria wrapper per le tue chiamate esatte. Guarda come Mono.Unix avvolge syscalls (ricerca di codici google per Mono.Unix Syscall.cs) per avere l'idea. Quindi crea un wrapper per ogni comando ioctl specifico, che utilizza la tua rappresentazione dei dati.
Come ha detto jitter - dovrai importare lo stesso ioctl DLL
Verifica la mia domanda simile e domanda successiva sulla subject . In questo caso sto cercando di racchiudere l'interfaccia di Videl4Linux, che potrebbe interessarti.
Consiglio davvero quelle letture.