一尘不染

什么时候检查EINTR并重复函数调用?

linux

我正在为嵌入式Linux系统编写用户应用程序,并且正在使用设备的常用功能,例如打开,关闭,读取,ioctl等。现在,我读到有关EINTR的信息,它表明该功能已被信号中断,但我不确定其中的含义。在我拥有的所有示例程序中,有时都完成了,例如ioctl(),有时没有完成,例如read()。所以,我有点困惑。

何时最好检查EINTR并重复函数调用?


阅读 221

收藏
2020-06-03

共1个答案

一尘不染

参见sigaction:http
:
//pubs.opengroup.org/onlinepubs/009695399/functions/sigaction.html

SA_RESTART
  This flag affects the behavior of interruptible functions; that is, those 
  specified to fail with errno set to EINTR. If set, and a function specified 
  as interruptible is interrupted by this signal, the function shall restart 
  and shall not fail with EINTR unless otherwise specified. If the flag is not 
  set, interruptible functions interrupted by this signal shall fail with errno 
  set to EINTR.

默认情况下,您具有SA_RESTART行为,因此,如果您不使用信号,则不必担心EINTR。

2020-06-03