5

我正在尝试通过 Mono 框架执行 ioctl 命令,但我找不到我要找的东西。

我正在尝试向具有内核模块的 DVB 卡发送命令。我希望有人可以链接或清楚地解释如何做到这一点。我猜任何使用内核模块的 Mono 示例都会很有用。

4

4 回答 4

3

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

关于该主题的简短单声道邮件列表讨论

于 2009-06-22T09:50:13.087 回答
2

Mono AFAIK 不支持 ioctl。太特定于操作系统和参数列表取决于实际请求。你可以试试 DLLImport

与本机库互操作

于 2009-06-21T17:32:48.647 回答
2

您应该为您的确切调用编写一个包装库。看看 Mono.Unix 如何包装系统调用(谷歌代码搜索 Mono.Unix Syscall.cs)来了解这个想法。然后为每个特定的 ioctl 命令创建一个包装器,它使用您自己的数据表示。

正如 jitter 所说 - 你需要 DLLImport ioctl 本身。

于 2009-06-21T18:13:38.760 回答
1

检查我的类似问题,以及稍后关于该主题的问题。在这种情况下,我试图包装 Videl4Linux 接口,您可能会对此感兴趣。

我真的建议这些读数。

于 2012-06-11T23:02:56.553 回答