我正在编写一个 CAN 记录器程序。我记录数据的方式类似于candump
调用时 -tool的candump
方式candump any
:
https ://github.com/linux-can/can-utils/blob/master/candump.c
candump any
candump
绑定到任何设备,即它addr.can_ifindex = 0;
用于recvmsg
获取 CAN 帧,然后它获取struct msghdr msg;
附加时间戳以将其写入日志文件或屏幕上。
我的问题是,内核是否确保以下assert
内容始终有效?
struct msghdr msg;
// init stuff
// ...
s[0] = _skt_1; // can0
s[1] = _skt_2; // can1
// configure and bind sockets
// ...
select(s[1]+1, &rdfs, NULL, NULL, NULL));
recvmsg(s[0], &msg, 0); // https://linux.die.net/man/2/recvmsg
timestamp_1 = getTimestamp(msg);
recvmsg(s[1], &msg, 0); // https://linux.die.net/man/2/recvmsg
timestamp_2 = getTimestamp(msg);
// Always valid?
assert(timestamp_1 < timestamp_2);
对 SocketCAN 驱动程序中的源代码位置的提示也会有所帮助。