在任务一中:
...
while (1)
{
if (running == false)
break;
ret = read(fd, buf, size); /* Or: ret = recvfrom(sock, buf, size, 0, NULL, NULL); */
...
}
在任务二中:
...
running = true;
/* ioctl(fd, FIOCANCEL, 0); */
close(fd); /* Or: close(sock);*/
在任务II中应该做什么来取消被阻止的任务I,
在vxworks中,有一个函数ioctl(fd, FIOCANCEL, 0)
可以取消阻塞的读或写,但它不起作用。可能是因为驱动程序不支持“FIOCANCEL”。
如何在vxworks和linux中编写任务二?或者还有其他方法来完成我的任务吗?
最佳答案
在 Linux 上取消 read/recvfrom 调用是不可能的。您无法使用相同的 API 编写这些任务。在 Linux 上,您可以使用 epoll 和 O_NONBLOCK 来创建取消读取/接收的语义。
在 Linux 和 vxworks 上使用相同的代码不可能做到这一点。
关于c - 如何在 vxworks 或 linux 上取消阻塞的 read/recvfrom 系统调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17781516/