获取 CAN 比特率

Lau*_*enz 5 c++ can-bus netlink c++11 socketcan

我想用 C++ 读取我的 socketcan 套接字当前配置的 CAN 比特率。

我可以通过以下方式查看比特率ip -det link show can0

9: can0: <NOARP,UP,LOWER_UP,ECHO> mtu 16 qdisc pfifo_fast state UP mode DEFAULT group default qlen 10
    link/can  promiscuity 0 
    can state ERROR-ACTIVE restart-ms 100 
    bitrate 1000000 sample-point 0.750 
    tq 125 prop-seg 2 phase-seg1 3 phase-seg2 2 sjw 1
    pcan_usb: tseg1 1..16 tseg2 1..8 sjw 1..4 brp 1..64 brp-inc 1
    clock 8000000
Run Code Online (Sandbox Code Playgroud)

比特率通过设置/etc/network/interfaces,但用户可以手动更改它。

libsocketcan 似乎只支持设置比特率,但不支持读取比特率。

其代码产生上面的输出iproute2rtnetlink。

如何使用libnetlink读取相应的属性?或者还有另一种读取当前比特率的方法吗?

Lau*_*enz 4

现在,我解释了系统调用的输出ip -det link show can0 | grep bitrate | awk '{print $2}',这很丑陋但有效。

当然有更优雅的解决方案吗?

  • 至少是“grep的无用使用”。`ip -det 链接显示 can0 | awk '/比特率/ {print $1}'`。我也无法在“/sys/”中找到比特率。 (2认同)