【发布时间】:2020-10-20 17:04:43
【问题描述】:
我正在尝试确定我在 linux 上的 CAN 接口的缓冲区使用情况。
在界面层面,我知道两种获取统计信息的方法:
- 来自
/proc/net/can/stats ip -details -statistics link show can0
第一个给我发送/接收帧的数量。第二个给出了发送/接收的字节和数据包的数量,以及丢弃的数据包和溢出的数量。 不幸的是,这些都没有显示缓冲区中的当前帧/字节数。
注意:我知道我们可以设置 txqueuelen (ifconfig can0 txqueuelen <len>),设置太低会在填满时触发 write: No buffer space available。但是我仍然无法随时获取队列中的帧数。
在套接字级别(套接字像这样打开:socket(PF_CAN, SOCK_RAW, CAN_RAW)),我尝试查询输入/输出队列大小(可以在 Internet 套接字上完成):
int queued_in = -1;
ioctl(sockfd, SIOCINQ, &queued_in);
int queued_out = -1;
ioctl(sockfd, SIOCOUTQ, &queued_out);
但两个变量的值都保持为 -1,因此没有写入。我在这里做错了什么?
【问题讨论】:
标签: linux sockets networking can-bus socketcan