我正在尝试通过 Mono 框架执行 ioctl 命令,但我找不到我要找的东西。
我正在尝试向具有内核模块的 DVB 卡发送命令。我希望有人可以链接或清楚地解释如何做到这一点。我猜任何使用内核模块的 Mono 示例都会很有用。
Mono 在 Mono.Unix 中不包含 ioctl 的包装器,因为 ioctl 调用参数变化很大,这样的包装器几乎没有用处。您应该为您需要的每个 ioctl 声明一个DllImport。
您可能不需要用 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;
}
Mono AFAIK 不支持 ioctl。太特定于操作系统和参数列表取决于实际请求。你可以试试 DLLImport
您应该为您的确切调用编写一个包装库。看看 Mono.Unix 如何包装系统调用(谷歌代码搜索 Mono.Unix Syscall.cs)来了解这个想法。然后为每个特定的 ioctl 命令创建一个包装器,它使用您自己的数据表示。
正如 jitter 所说 - 你需要 DLLImport ioctl 本身。