【问题标题】:Using Linux ioctl with Mono将 Linux ioctl 与 Mono 一起使用
【发布时间】:2009-06-21 16:30:03
【问题描述】:

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

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

【问题讨论】:

    标签: mono ioctl


    【解决方案1】:

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

    A short mono mailing list discussion on the topic.

    【讨论】:

      【解决方案2】:

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

      Interop with Native Libraries

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          【解决方案4】:

          检查我的similar question,以及稍后在subject 上的问题。在这种情况下,我正在尝试封装 Videl4Linux 接口,这可能会引起您的兴趣。

          我真的推荐这些读物。

          【讨论】:

            猜你喜欢
            • 2011-07-04
            • 2018-06-12
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-02-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多