首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >分块函数和EINTR

分块函数和EINTR
EN

Stack Overflow用户
提问于 2012-10-30 03:47:04
回答 2查看 1.7K关注 0票数 4

许多POSIX阻塞函数在出现信号时返回EINTR。其思想是信号处理器首先设置一个标志(在SIGINT的情况下是'stop‘标志),然后阻塞函数解锁返回EINTR,应用程序看到该标志并执行有序关机(或其他)。

但是,对于像pthread_mutex_lock和pthread_cond_wait这样的阻塞函数,没有EINTR错误。

这背后的想法是什么?使用这些函数的应用程序应该如何处理信号(特别是Ctrl+C)?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-03 18:59:22

没有回答。我的假设是pthread_cond_wait()和SIGINT不能组合在一起来执行干净的关机。使用sem_wait()或类似方法代替pthread_cond_wait()。

票数 1
EN

Stack Overflow用户

发布于 2012-10-30 05:27:14

通常,只有系统调用(低级操作系统调用)才会返回EINTR。更高级别的标准库调用则不需要。例如,readwrite可能会返回EINTR,但printfgets不会。

通常,在接收到EINTR时,正确的做法是重做调用--这就是为什么信号处理程序上存在SA_RESTART标志。如果你想处理Ctrl-C,你只需要不要忽略这个信号。退出的默认操作可能是您想要的,或者您可以编写自己的信号处理程序来执行其他操作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13128538

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档