c - 如何在 vxworks 或 linux 上取消阻塞的 read/recvfrom 系统调用

标签 c linux unix vxworks

任务一中:

...

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/

相关文章:

c++ - 为什么我们需要 libstdc++.so?

c - Turbo C 编译器问题,sqrt() 函数不适用于可变参数

linux - 如何使此 "action-packed, random data"在终端中回显?

linux - 网络掩码对于公共(public) IP 意味着什么?

linux - 如何使用 tasket 将 cpu 核心分配给带有参数的程序的多个实例

linux - 如何让程序可以由具有所有者权限的特定用户在linux上运行

java - 检查 java 代码是否正在运行,如果没有运行则尝试重新启动 (unix)

c++ - 按引用调用和按值调用之间的区别

通过 shell 执行 "cat"的 C 文件操作

c - openssl 并监听随机端口