在的任務,我:如何取消VxWorks的阻塞讀/ recvfrom的系統調用或Linux
...
while (1)
{
if (running == false)
break;
ret = read(fd, buf, size); /* Or: ret = recvfrom(sock, buf, size, 0, NULL, NULL); */
...
}
在任務II:
...
running = true;
/* ioctl(fd, FIOCANCEL, 0); */
close(fd); /* Or: close(sock);*/
又該做任務II取消被阻止的任務I,
在vxworks,有一個功能,ioctl(fd, FIOCANCEL, 0)
取消阻塞的讀取或寫入,但它不能工作。可能是因爲驅動程序無法支持「FIOCANCEL」。
如何在vxworks和linux中編寫任務II?還是有任何其他方式來完成我的任務?
接收信號將導致讀取返回-1並且錯誤EINTR – LostBoy
意味着任務I「接收信號」?我阻止的任務?它怎麼稱呼接收信號功能? –
鑑於您使用Linux並且您知道任務1的進程ID,您可以通過在任務2中調用kill(pid,SIGUSR1)向其發送信號。這會使讀取以-1返回。 Errno將被設置爲EINTR。 – LostBoy