Pergunta
Eu estou tentando fazer de comando ioctl através framework Mono, mas não consigo encontrar o que estou procurando.
Eu estou tentando enviar comandos para um cartão de DVB que tem um módulo do kernel. Espero que alguém pode ligar ou explicar claramente como isso pode ser feito. Qualquer exemplo, com Mono usando módulos do kernel seria útil eu acho.
Solução
Mono não contém um invólucro para ioctl em Mono.Unix, porque os parâmetros de chamada ioctl variam muito e tal invólucro um seria quase inútil. Você deve declarar um DllImport para cada ioctl que você precisa.
Você provavelmente não precisa de uma biblioteca auxiliar escrito em C, no entanto, você pode precisar dele durante o desenvolvimento para extrair valores reais escondidos atrás de diferentes macros C pré-processador. Por exemplo, para expandir C cabeçalho:
#define FE_GET_INFO _IOR('o', 61, struct dvb_frontend_info)
compilação e executar esse auxiliar:
#include <linux/dvb/frontend.h>
#include <stdio.h>
int main()
{
printf("const int FE_GET_INFO = %d;\n", FE_GET_INFO);
return 0;
}
Outras dicas
ioctl não é suportado pelo Mono AFAIK. específica OS-Too e lista de parâmetros depende de solicitação real. Você poderia tentar DLLImport
Você deve escrever uma biblioteca wrapper para suas chamadas de exatas. Olhada em como Mono.Unix envolve syscalls (google codesearch para Mono.Unix Syscall.cs) para obter a idéia. Em seguida, criar um wrapper para cada comando específico ioctl, que usa sua própria representação dos dados.
Como jitter disse -. Você precisa DLLImport o próprio ioctl
Verifique para o meu semelhante pergunta , e pergunta, mais tarde, o subject . Neste caso, eu estou tentando envolver a interface Videl4Linux, que poderia ser de interesse para você.
Eu realmente sugerem essas leituras.