可以使用 ioctl 或类似的 C/C++ 来设置波特率

可以使用 ioctl 或类似的 C/C++ 来设置波特率

我目前正在使用 ip 链接设置 can0 的波特率:

/sbin/ip link set can0 up 类型 can 比特率 250000

我只是想知道如何在 C/C++ 中做同样的事情?

答案1

如前所述,您可以查看使用 libnetlink 的 iproute2 源代码。但是根据文档libnetlink 供内部使用,新程序使用 libmnl

Libmnl 的 api 略有不同,因此它不是直接替代品,但它的工作方式和工作方式相同。基本上,您需要设置一个 netlink 消息,然后开始添加嵌套属性。消息构建完成后,使用 libmnl 套接字 api 将其发送到 netlink,然后就完成了。

设置链接向上/向下的示例代码: https://github.com/pevik/libmnl/blob/60e34d339522bbad3142fa1609e4506edd33c969/examples/rtnl/rtnl-link-set.c

请注意,要设置波特率,您不需要设置ifi_flags.相反,在添加包含 can 设备名称的属性(使用 )后,您需要使用,mnl_attr_put_str添加嵌套的 linkinfo 对象mnl_attr_nest_startmnl_attr_put_str接下来,使用这些相同的函数,您还需要添加 can bittiming 对象 ( struct can_bittiming)。看iplink_can.c有关需要在此结构中设置哪些数据的示例。您可以通过调用mnl_attr_nest_end两个嵌套对象来完成有效负载的构建。

相关内容