我正在尝试确定我的 CAN 接口在 linux 上的缓冲区使用情况。
在界面级别,我知道两种获取统计信息的方法:
- 从
/proc/net/can/stats
ip -details -statistics link show can0
第一个给我发送/接收帧的数量。第二个给出了发送/接收的字节和数据包的数量,以及丢弃的数据包和溢出的数量。不幸的是,这些都没有显示缓冲区中当前的帧/字节数。
注意:我知道我们可以设置 txqueuelen ( ifconfig can0 txqueuelen <len>
),设置太低会write: No buffer space available
在它填满时触发 a。但是我仍然无法随时获得队列中的帧数。
在套接字级别(套接字像这样打开:)socket(PF_CAN, SOCK_RAW, CAN_RAW)
,我尝试查询输入/输出队列大小(可以在互联网套接字上完成):
int queued_in = -1;
ioctl(sockfd, SIOCINQ, &queued_in);
int queued_out = -1;
ioctl(sockfd, SIOCOUTQ, &queued_out);
但是这两个变量的值仍然是 -1,所以它没有被写入。我在这里做错了什么?