scanf功能和EINTR信号

时间:2015-03-25 10:27:43

标签: c linux signals scanf eintr

我正在Linux平台上工作。 我有一个基于控制台的多线程应用程序,它为其他功能加载一个多线程共享对象库。 共享对象库在内部打开用于通信的串行端口。 该库使用“开放”,“读取”和“写入”Linux系统调用进行串行通信。串行通信使用信号处理程序来接收数据。 控制台应用程序中的主线程等待'scanf'语句,以获取用户的输入。

只要串口上有任何活动,就会产生信号,因为“扫描”调用被EINTR中断(系统调用中断)。

由于串口上的读写操作,有没有“scanf”不会被中断的方法?

1 个答案:

答案 0 :(得分:0)

如果使用SA_RESTART标志安装信号处理程序,read()write()调用将不会在Linux中返回EINTR错误; scanf()系列标准I / O函数(因为它们在内部使用read())也不会。有关详细信息,请参阅man 7 signal部分“信号处理程序中断系统调用和库函数”。尽管此行为是特定于系统的,但我使用的所有其他类Unix系统的行为方式都相同。 - Nominal Animal