문제

모노 프레임 워크를 통해 IOCTL 명령을하려고하지만 찾고있는 것을 찾을 수 없습니다.

커널 모듈이있는 DVB 카드로 명령을 보내려고합니다. 누군가가 어떻게이를 수행 할 수 있는지 명확하게 연결하거나 설명 할 수 있기를 바랍니다. 커널 모듈을 사용하는 모노의 예제는 유용 할 것입니다.

도움이 되었습니까?

해결책

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

주제에 대한 짧은 모노 메일 링리스트 토론.

다른 팁

IOCTL은 Mono Afaik의 지원을받지 않습니다. 너무 OS 특정 및 매개 변수 목록은 실제 요청에 따라 다릅니다. dllimport를 시도 할 수 있습니다

기본 라이브러리와 연결됩니다

정확한 통화를 위해 래퍼 라이브러리를 작성해야합니다. mono.unix가 SyScalls (Google Codesearch for mono.unix syscall.cs)를 랩핑하여 아이디어를 얻는 방법을 살펴보십시오. 그런 다음 각각의 데이터 표현을 사용하는 각 특정 IOCTL 명령에 대한 래퍼를 만듭니다.

지터가 말했듯이 - IOCTL 자체를 dllimport해야합니다.

비슷한 질문, 그리고 나중에 질문 주제. 이 경우 Videl4linux 인터페이스를 랩핑하려고합니다.

나는 그 독서를 정말로 제안한다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top