gpt4 book ai didi

检查是否 errno != EINTR : what does it mean?

转载 作者:IT王子 更新时间:2023-10-29 00:26:25 25 4
gpt4 key购买 nike

我发现这段代码被使用了好几次(还有一个类似的代码,它使用 open() 而不是 write())。

int c = write(fd, &v, sizeof(v));
if (c == -1 && errno != EINTR) {
perror("Write to output file");
exit(EXIT_FAILURE);
}

这里为什么检查if && errno != EINTR

man 上寻找 errno 我发现了以下关于 EINTR 的文本,但即使我访问了 man 7 signal 这并没有启发我。

EINTR Interrupted function call (POSIX.1); see signal(7).

最佳答案

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

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

关于检查是否 errno != EINTR : what does it mean?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41474299/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com