一尘不染

检查errno!= EINTR:这是什么意思?

linux

我发现这段代码使用了几次(也使用了类似的代码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中断函数调用(POSIX.1);参见signal(7)。


阅读 338

收藏
2020-06-03

共1个答案

一尘不染

EINTR如果在进行系统调用时发生信号,许多系统调用将报告错误代码。实际上没有发生错误,只是因为系统无法自动恢复系统调用,所以才报告这种错误。这种编码模式仅在发生这种情况时重试系统调用,以忽略中断。

例如,如果程序alarm()在计时器用尽时利用异步方式运行某些代码,则可能会发生这种情况。如果在调用程序时发生超时write(),我们只想重试系统调用(又名读/写等)。

2020-06-03