我可以强行冲洗CAN总线插座吗?

时间:2014-02-18 09:52:31

标签: c++ c sockets can-bus

在我的软件中(用C ++编写)我正在使用Linux标准函数在CAN总线套接字上打开和执行I / O操作。

打开套接字并按如下方式使用:

   /* Create the socket */
if ((skt = socket( PF_CAN, SOCK_RAW, CAN_RAW )) < 0)
{
  ...
}

struct ifreq ifr;
strcpy(ifr.ifr_name, "can0");
ioctl(skt, SIOCGIFINDEX, &ifr);

struct sockaddr_can addr;
addr.can_family = AF_CAN;
addr.can_ifindex = ifr.ifr_ifindex;

ifr.ifr_ifru.ifru_ivalue = 1000000/2;
ioctl(skt, SIOCSCANBAUDRATE, &ifr);

if(bind( skt, (struct sockaddr*)&addr, sizeof(addr) ) < 0)
{
  ...
}

稍后代码......

write(skt, &msg, sizeof(struct can_frame));

但是我注意到有时我刚刚在套接字上写的消息没有通过总线发送。 我认为它就像一个缓冲区,有时需要一个明确的刷新(比如很多消息同时等)。 我在网上搜索但是我发现没有什么适合我的情况(很多人建议使用fflush(),但我只有文件描述符声明为int),所以问题是:有一种方法可以不使用FSTREAM强制刷新插座?

可能不是我的软件可以修复的问题,但值得一试......

1 个答案:

答案 0 :(得分:0)

尝试使用fflush或flushall,看看它有帮助。