2025年阻塞性系统调用失败,errno(ENTIR)4 [Interrupted system call]系统调用被信号中断

阻塞性系统调用失败,errno(ENTIR)4 [Interrupted system call]系统调用被信号中断1 阻塞与非阻塞 非阻塞 程序调用后 不管能不能立刻得到结果 当前进程都会直接返回 如果得到结果则返回成功 否则返回失败 阻塞 程序调用后 如果不能立刻得到结果 则当前进程会被挂起 无限期等待 直到得到结果时才会返回

大家好,我是讯享网,很高兴认识大家。

1.阻塞与非阻塞

非阻塞:程序调用后,不管能不能立刻得到结果,当前进程都会直接返回。如果得到结果则返回成功,否则返回失败。

阻塞:程序调用后,如果不能立刻得到结果,则当前进程会被挂起,无限期等待,直到得到结果时才会返回。

系统调用一般可通过参数控制阻塞或者非阻塞。

常用在IPC通信和网络通信中,需要根据同步或异步设置阻塞和非阻塞:

msgsnd/msgrcv:消息队列发送、接收消息。

semop:信号量操作,用户改变信号量的值。P、V操作。

send/recv,read/write:socket 发送、读写缓冲区。


讯享网

2.errno ENTIR

        errno ENTIR(4) 系统调用被信号中断,一般发生在被阻塞的系统调用中。

3.解决办法

        在阻塞调用失败后,检查系统错误码 errno 是否是 ENTIR, 重复当前系统调用。

        msgsnd代码示例(msgsnd最后一个参数为0代表当消息队列满时,msgsnd将会阻塞,直到消息能写进消息队列):

... while (1) { if (msgsnd( msqid, &sendbuf, sendlen, 0) < 0 && errno == ENTIR) { continue; } break; } ... 

讯享网

参考true0face-系统调用中断。链接:https://blog.csdn.net/true0face/article/details/ 

小讯
上一篇 2025-02-18 09:40
下一篇 2025-02-21 19:48

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/73105.html