我发现这段代码使用了几次(也是使用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/

10-11 23:12