2009-06-21 31 views
5

Tôi đang cố gắng thực hiện lệnh ioctl thông qua khung Mono, nhưng tôi không thể tìm thấy những gì tôi đang tìm kiếm.Sử dụng Linux ioctl với Mono

Tôi đang cố gắng gửi lệnh tới thẻ DVB có mô-đun hạt nhân. Tôi hy vọng ai đó có thể liên kết hoặc giải thích rõ ràng cách thức này có thể được thực hiện. Bất kỳ ví dụ với Mono sử dụng mô-đun hạt nhân sẽ hữu ích tôi đoán.

Trả lời

3

Mono không chứa trình bao bọc cho ioctl trong Mono.Unix, vì thông số cuộc gọi ioctl thay đổi rất nhiều và trình bao bọc như vậy sẽ gần như vô dụng. Bạn nên khai báo DllImport cho mỗi ioctl bạn cần.

Bạn có thể không cần thư viện trợ giúp được viết bằng C, tuy nhiên, bạn có thể cần nó trong quá trình phát triển để trích xuất các giá trị thực được ẩn sau các macro tiền xử lý C khác nhau. Ví dụ, để mở rộng C tiêu đề:

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

biên dịch và thực thi helper này:

#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 không được Mono AFAIK hỗ trợ. Danh sách tham số quá cụ thể và hệ điều hành phụ thuộc vào yêu cầu thực tế. Bạn có thể thử DllImport

Interop with Native Libraries

2

Bạn nên viết một thư viện wrapper cho các cuộc gọi chính xác của bạn. Hãy xem cách Mono.Unix bao bọc các syscalls (tìm kiếm mã google cho Mono.Unix Syscall.cs) để có được ý tưởng. Sau đó tạo một trình bao bọc cho mỗi lệnh ioctl cụ thể, sử dụng biểu diễn dữ liệu của bạn.

Như jitter đã nói - bạn sẽ cần DLLNhập ioctl chính nó.

1

Kiểm tra similar question của tôi và câu hỏi sau trên subject. Trong trường hợp này, tôi đang cố gắng bọc giao diện Videl4Linux, điều đó có thể khiến bạn quan tâm.

Tôi thực sự đề xuất các bài đọc đó.

Các vấn đề liên quan