Raspberry Pi上的套接字CAN

时间:2017-04-04 00:18:49

标签: c linux sockets posix can-bus

我正在编写一个应用程序,它应该通过Socket CAN访问CAN总线。 我找到了这个指南(Linux Kernel CAN),并查看了this页面上的示例。

第二页上的示例是有效的,除了它们使用我的应用程序不需要的阻塞调用。 第一个会更好,但只使用这些例子也不行。

在git diff视图中,我分析了这些差异并且遇到了这些问题:

FD_ZERO(&rdfs);
FD_SET(baseSocket, &rdfs);
if(FD_ISSET(baseSocket, &rdfs))
{
    int idx;

    /* these settings may be modified by recvmsg() */
    iov.iov_len = sizeof(frame);
    msg.msg_namelen = sizeof(addr);
    msg.msg_controllen = sizeof(ctrlmsg);
    msg.msg_flags = 0;

    recvmsg(baseSocket, &msg, MSG_DONTWAIT);

    for (cmsg = CMSG_FIRSTHDR(&msg);
         cmsg && (cmsg->cmsg_level == SOL_SOCKET);
         cmsg = CMSG_NXTHDR(&msg,cmsg)) {
    }
// ... use &frame variable

wheras我试图使用以下代码:

nbytes = read(baseSocket, &frame, sizeof(struct can_frame));

根据kernel.org论文应该足够了。 有人可以解释一下上面代码中recvmsg()周围的东西是做什么的吗?也许这会帮助我理解为什么第一个工作正常而第二个工作没有。

0 个答案:

没有答案