我发现这段代码使用了几次(也是使用open()
而不是write()
的类似代码)。
int c = write(fd, &v, sizeof(v));
if (c == -1 && errno != EINTR) {
perror("Write to output file");
exit(EXIT_FAILURE);
}
为什么在这里检查
&& errno != EINTR
? 在男子身上寻找
errno
时,我发现了以下有关EINTR
的文字,但是即使我访问了man 7 signal
也没有启发我。最佳答案
如果在进行系统调用时发生信号,许多系统调用将报告EINTR
错误代码。实际没有发生错误,只是以这种方式报告,因为系统无法自动恢复系统调用。这种编码模式仅在发生这种情况时重试系统调用,以忽略中断。
例如,如果程序在计时器用尽时利用alarm()
异步运行某些代码,则可能会发生这种情况。如果在程序调用write()
时发生超时,我们只想重试系统调用(又名读/写等)。
关于c - 检查errno!= EINTR : what does it mean?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41474299/