Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从CAN_原始套接字中删除CAN消息筛选器?_C_Linux_Beagleboneblack_Can Bus_Socketcan - Fatal编程技术网

如何从CAN_原始套接字中删除CAN消息筛选器?

如何从CAN_原始套接字中删除CAN消息筛选器?,c,linux,beagleboneblack,can-bus,socketcan,C,Linux,Beagleboneblack,Can Bus,Socketcan,SocketCAN说要在套接字中添加一些过滤器: struct can_filter rfilter[2]; rfilter[0].can_id = 0x123; rfilter[0].can_mask = CAN_SFF_MASK; rfilter[1].can_id = 0x200; rfilter[1].can_mask = 0x700; setsockopt(s, SOL_CAN_RAW, CAN_RAW_FILTER, &rfilter, sizeof(rfilte

SocketCAN说要在套接字中添加一些过滤器:

struct can_filter rfilter[2];

rfilter[0].can_id   = 0x123;
rfilter[0].can_mask = CAN_SFF_MASK;
rfilter[1].can_id   = 0x200;
rfilter[1].can_mask = 0x700;

setsockopt(s, SOL_CAN_RAW, CAN_RAW_FILTER, &rfilter, sizeof(rfilter));
但它没有说明如果同一个套接字上有多个过滤器,如何删除特定的过滤器。有人能帮我猜一下/解释一下吗


(这件事写在什么地方了吗?或者我应该在接触SocketCAN之前先获得很多linux sockets的一般经验?

做以下事情怎么样?步骤1:设置锁定选项(s、SOL_CAN_RAW、CAN_RAW_FILTER和rfilter_1、sizeof(rfilter_1));其中,rfilter_1是过滤器的任何配置。然后,假设您希望从此配置中删除一些筛选器+向其添加新筛选器,然后使用该配置创建一个新的rfilter_2,并执行步骤2:setsockopt(s,SOL_CAN_RAW,CAN_RAW_FILTER,NULL,0);然后是setsockopt(s,SOL_CAN_RAW,CAN_RAW_FILTER,&rfilter_2,sizeof(rfilter_2))@恐怕这就是解决办法。或者类似的。如果我是正确的,在查看了位于./kernel/2.6/net/can/raw.c:471的函数
raw_setsockopt()
之后,此函数总是用给定的新过滤器替换所有旧过滤器,因此我甚至不必关心清除现有过滤器。令人伤心的是,为了能够重新创建新的过滤器配置
rfilter
,我必须自己跟踪所有当前的过滤器。