Использование Linux ioctl с Mono - PullRequest
5 голосов
/ 21 июня 2009

Я пытаюсь выполнить команду ioctl через платформу Mono, но не могу найти то, что ищу.

Я пытаюсь отправить команду на DVB-карту с модулем ядра. Я надеюсь, что кто-то может связать или объяснить, как это можно сделать. Я думаю, что любой пример с Mono с использованием модулей ядра был бы полезен.

Ответы [ 4 ]

3 голосов
/ 22 июня 2009

Mono не содержит оболочки для ioctl в Mono.Unix, потому что параметры вызова ioctl сильно различаются, и такая оболочка будет почти бесполезной. Вы должны объявить DllImport для каждого ioctl, который вам нужен.

Возможно, вам не нужна вспомогательная библиотека, написанная на C, однако она может понадобиться вам во время разработки для извлечения фактических значений, скрытых за разными макросами препроцессора C. Например, чтобы развернуть заголовок C:

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

скомпилируйте и выполните этот помощник:

#include <linux/dvb/frontend.h>
#include <stdio.h>

int main()
{
  printf("const int FE_GET_INFO = %d;\n", FE_GET_INFO);
  return 0;
}

Короткое моно обсуждение списка рассылки по теме .

2 голосов
/ 21 июня 2009

Вы должны написать библиотеку для ваших точных вызовов. Посмотрите, как Mono.Unix оборачивает системные вызовы (поиск кода Google для Mono.Unix Syscall.cs), чтобы понять эту идею. Затем создайте оболочку для каждой конкретной команды ioctl, которая использует ваше собственное представление данных.

Как сказал джиттер - вам нужно DLLImport самого ioctl.

2 голосов
/ 21 июня 2009

ioctl не поддерживается Mono AFAIK. Слишком специфичный для ОС и список параметров зависит от фактического запроса. Вы можете попробовать DLLImport

Взаимодействие с нативными библиотеками

1 голос
/ 12 июня 2012

Проверьте для моего аналогичного вопроса , а затем задайте вопрос . В этом случае я пытаюсь обернуть интерфейс Videl4Linux, который может вас заинтересовать.

Я действительно предлагаю эти показания.

...