1,318
社区成员
发帖
与我相关
我的任务
分享
int main(int argc, char *argv[])
{
int s;
int ret;
int nbytes;
int loopback = 0;
struct sockaddr_can addr;
struct ifreq ifr;
struct can_frame frame;
struct can_filter filter[1];
//1.套接字
s = socket(PF_CAN, SOCK_RAW, CAN_RAW);
strcpy(ifr.ifr_name, "can0");
printf("can0 socket = %d\n", s);
//2.设置
ret = ioctl(s, SIOCGIFINDEX, &ifr);
if(ret < 0){
perror("IOCTL Failed!\n");
return 1;
}
printf("can0 can_ifindex = %x\n", ifr.ifr_ifindex);
//3.协议族
addr.can_family = PF_CAN;
addr.can_ifindex = ifr.ifr_ifindex;
//4.绑定
ret = bind(s, (struct sockaddr *)&addr, sizeof(addr));
if(ret < 0){
perror("Bind Failed!\n");
return 1;
}
//5.设置滤波:接收所有
filter[0].can_id = 0;
filter[0].can_mask = 0;
setsockopt(s, SOL_CAN_RAW, CAN_RAW_LOOPBACK, &loopback, sizeof(loopback));
setsockopt(s, SOL_CAN_RAW, CAN_RAW_FILTER, &filter, sizeof(filter));
printf("Listening...\n");
while(1) {
//6.read数据
nbytes = read(s, &frame, sizeof(struct can_frame));
if(nbytes > 0){
printf("Received a Frame!\n");
printf("Length : %d\n", nbytes);
printf("ID : 0x%X\n", frame.can_id);
}
}
close(s);
return 0;
}