- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
有没有专家可以帮助我解决以下问题?
我在 C 中有以下系统调用:
access()
unlink()
setsockopt()
fcntl()
setsid()
socket()
bind()
listen()
我想知道它们是否会因错误代码 -1 和错误号 EINTR/EAGAIN 而失败。
我应该为这些处理 EINTR/EAGAIN 吗?
该文档没有提到与 EINTR/EAGAIN 相关的任何内容,但我看到很多人处理它。
哪个是正确的?
这是我注册信号处理程序的方式:https://gitorious.org/zepto-web-server/zepto-web-server/source/b1b03b9ecccfe9646e34caf3eb04689e2bbc54dd:src/signal-dispatcher-utility.c
这里还有一个提交,我在一些我知道返回 EINTR 或 EAGAIN 的系统调用中添加了一些 EINTR/EAGAIN 处理:https://gitorious.org/zepto-web-server/zepto-web-server/commit/b1b03b9ecccfe9646e34caf3eb04689e2bbc54dd
最佳答案
除非你安装了一个中断信号处理程序(一个安装了 sigaction
省略了 SA_RESTART
标志,或者一个安装了 signal
功能在一些系统),你不应该期望看到 EINTR
。
在您的特定函数列表中,除了 fcntl
之外,我没有看到任何可以体验 EINTR
的函数,并且仅当它用于锁定时。不过,John 的回答中的链接应该有助于回答有关特定功能的问题。
关于c - 系统调用和 EINTR 错误代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25729901/
许多 POSIX 阻塞函数在有信号的情况下返回 EINTR。这个想法是信号处理程序首先设置一个标志(在 SIGINT 的情况下说“停止”标志),然后阻塞函数取消阻塞返回 EINTR,并且应用程序看到该
如果读取大量数据,是否需要检查errno == EINTR?我使用 pread() 函数来读取。在我的一生中,我从未见过 EINTR 返回,但我在网上看到了一些代码,其中明确地检查了它。 那么真的有必
tl;博士 在 Python 中读取管道时,我是否应该处理 EINTR“系统调用中断”错误?如果是,我该如何测试此类代码? 描述 在下面的回溯中,self._dataq 是一个 multiproces
我正在运行一个 epoll 循环,有时我对 epoll_wait 的调用返回 -1,errno 设置为 EINTR。有时,我希望这样可以结束 epoll 循环,例如 SIGTERM 或 SIGINT。
简而言之,您如何对系统调用中的 EINTR 等错误条件进行单元测试。 我正在处理的一个特定示例(它本身可能就是一个案例)是当 fclose 返回带有 (errno==EINTR) 的 EOF 时是否有
我看到了处理 EINTR 错误的代码(读、写系统调用)。我了解中断发生在两种情况下。首先,它发生在调度的每个时间片上。其次,它是通过信号发生的。但是 stackoverflow 中的每个人都说只是信号
关闭。这个问题是not reproducible or was caused by typos .它目前不接受答案。 这个问题是由于错别字或无法再重现的问题引起的。虽然类似的问题可能是on-topi
在我的程序中,我有一个系统调用“sendmsg()”。我想测试如果这个系统调用被中断会发生什么。我应该怎么做? int test(args) { ----- /
我有一个线程负责轮询各种fds。我正在使用设置了超时的 epoll_wait。以下是代码片段: do { n = epoll_wait(epollFd, eventsList, eventsT
我研究发现用socket编程时会出现信号中断的情况。我搜索了一下,发现如果信号中断,我们应该重试。也就是说,我必须捕获错误并重试。我必须像这样创建套接字。 int create_sock() {
有没有专家可以帮助我解决以下问题? 我在 C 中有以下系统调用: access() unlink() setsockopt() fcntl() setsid() socket() bind() lis
来自 man -e 2 wait : The call wait(&status) is equivalent to: waitpid(-1, &status, 0); 错误号值: EINTR WNO
使用 timer_create,我们向等待 select 函数的线程发送实时信号。 这个信号在线程中被捕获和处理。基于事实,当捕获到信号时,选择将被中断,如果 select 失败并显示错误号 EINT
我发现这段代码被使用了好几次(还有一个类似的代码,它使用 open() 而不是 write())。 int c = write(fd, &v, sizeof(v)); if (c == -1 && e
我正在为嵌入式 Linux 系统编写用户应用程序,并且我正在为设备使用诸如打开、关闭、读取、ioctl 等常用功能。现在,我阅读了有关 EINTR 的信息,表明该函数被信号中断,但我不确定其含义。在我
有一些系统调用支持的 I/O 函数(我最近发现至少两个:stat() 和 mkdir() 但几乎可以肯定还有更多)根据 POSIX,可能的 errno 值中没有 EINTR,但肯定可能由于磁盘繁忙或网
在规范和两个实现中: 根据 POSIX,dup2()可能返回 EINTR。 linux 手册页将其列为允许的。 FreeBSD 手册页表明它从未返回。这是一个错误吗 - 因为它的紧密实现可以 EINT
到目前为止我的网络代码工作正常,但我有点担心我隐藏在地毯下的东西: accept、close、connect、recv 和 send 的手册页> 提到 errno.EINTR 可以在系统调用被信号中断
注意: This question与我的相当接近,但我至少可以对提供的解决方案使用一些工作示例,也许 ZeroMQ 会带来一些我不知道的魔力。 目前,我在阻止 ZeroMQ 调用时对异常使用react
我是信号量的新手,想在我的程序中添加多线程,但我无法解决以下问题:只要我没有设置 SA_RESTART,sem_wait() 应该能够接收 EINTR 并解锁旗帜。我正在向在 sem_wait() 中
我是一名优秀的程序员,十分优秀!