我看到处理EINTR错误的代码(读,写系统调用)。
我知道中断发生在两种情况下。首先,它发生在时间表的每个时间量。其次,它是通过信号发生的。但stackoverflow的每个人都说只是信号箱而已。
所以,我的问题是EINTR只是通过信号返回的?还是被别的什么东西还回来了?
最佳答案
既然您提到了read
和write
,我假设您指的是与POSIX兼容的操作系统,并回答了这些问题。正如jwdonahue所指出的,对于不同的功能和操作系统,它可能是不同的。
返回值EINTR
表示函数在完成其正常工作之前被信号中断。信号本身可能是或不是由中断引起的。让我详细说明一下,因为“中断”、“信号”和“中断”这三个词是微妙的。
信号只是一种特殊的进程间通信。它允许内核中断进程的执行,从而使进程相互中断。
另一方面,中断是源于处理器的一种较低层次的、通常与硬件相关的现象。在POSIX环境中,中断通常由内核转换成信号并发送到相关进程。
所以EINTR
表示接收到信号。该信号导致进程被“中断”(不要与中断混淆)。信号可能是或不是由潜在中断引起的。例如,SIGSEGV
和SIGBUS
是由中断引起的,而SIGINT
是由软件引起的,通常是当Ctrl-C发送到终端时。
关于c - EINTR错误何时返回?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51219571/