当前位置: 首页 > 面试题库 >

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

阳念
2023-03-14
问题内容

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

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


问题答案:

参见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。



 类似资料:
  • 问题内容: 我发现这段代码使用了几次(也使用了类似的代码代替)。 为什么在这里检查? 寻找对 男人 ,我发现关于下面的文字,但即使我参观不赐教。 EINTR中断函数调用(POSIX.1);参见signal(7)。 问题答案: 如果在进行系统调用时发生信号,许多系统调用将报告错误代码。实际上没有发生错误,只是因为系统无法自动恢复系统调用,所以才报告这种错误。这种编码模式仅在发生这种情况时重试系统调用

  • 基本问题:程序何时在C中调用类的析构函数方法?有人告诉我,每当对象超出范围或受到时都会调用它 更具体的问题: 1)如果对象是通过指针创建的,并且该指针后来被删除或给定一个新的地址来指向,它所指向的对象是否调用其析构函数(假设没有其他东西指向它)? 2) 接下来是问题1,什么定义了对象何时超出范围(与对象何时离开给定的{block}无关)。换句话说,什么时候对链表中的对象调用析构函数? 3) 你想手

  • 我正在使用Jest测试一些实用函数。 my_util.js: 另一个例子。js: 测试调用了的最简单方法是什么?这是我当前的单元测试,它失败了。有没有一种方法可以测试函数是否以其名称调用? 结果:

  • 何时在Spring中使用构造函数注入? 我听说,当您在使用组件之前必须拥有依赖类的实例时,构造函数注入特别有用。但这意味着什么? 有没有人可以用一些简单的例子来解释我以下的时刻: 使用构造函数注入有什么好处

  • 问题内容: 嗨,我想知道何时才是使用htmlspecialchars()的适当位置。是在将数据插入数据库之前还是从数据库中检索数据时? 问题答案: 仅在将数据回显为HTML时才应调用此方法。 不要将转义的HTML存储在数据库中;它只会使查询更烦人。 数据库应存储您的实际数据,而不是其HTML表示形式。

  • 问题内容: 这个问题已经在这里有了答案 : MyISAM与InnoDB [已关闭] (25个答案) 7年前关闭。 MyISAM的设计思想是查询数据库远不止其更新,因此它执行非常快的读取操作。如果您的读写(插入|更新)比率小于15%,则最好使用MyISAM。 InnoDB使用行级锁定,具有提交,回滚和崩溃恢复功能来保护用户数据。支持交易和容错 以上区别是正确的MyISAM和InnobDB之间吗? 请