2009-06-21 5 views
5

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

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

ответ

3

Моно не содержит обертку для 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; 
} 

A short mono mailing list discussion on the topic.

2

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

Interop with Native Libraries

2

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

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

1

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

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

Смежные вопросы