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.

È stato utile?

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;
}

Una breve discussione in mono mailing list sull'argomento .

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

Interoperabile con librerie native

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top