我发现这段代码使用了几次(也使用了类似的代码open()代替write())。
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
寻找errno对 男人 ,我发现关于下面的文字EINTR,但即使我参观man 7 signal不赐教。
errno
EINTR
man 7 signal
EINTR中断函数调用(POSIX.1);参见signal(7)。
EINTR如果在进行系统调用时发生信号,许多系统调用将报告错误代码。实际上没有发生错误,只是因为系统无法自动恢复系统调用,所以才报告这种错误。这种编码模式仅在发生这种情况时重试系统调用,以忽略中断。
例如,如果程序alarm()在计时器用尽时利用异步方式运行某些代码,则可能会发生这种情况。如果在调用程序时发生超时write(),我们只想重试系统调用(又名读/写等)。
alarm()