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.

Foi útil?

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

Uma lista de discussão discussão curta mono sobre o tema .

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

Interop com Bibliotecas Nativas

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top