我正在Linux平台上工作。 我有一个基于控制台的多线程应用程序,它为其他功能加载一个多线程共享对象库。 共享对象库在内部打开用于通信的串行端口。 该库使用“开放”,“读取”和“写入”Linux系统调用进行串行通信。串行通信使用信号处理程序来接收数据。 控制台应用程序中的主线程等待'scanf'语句,以获取用户的输入。
只要串口上有任何活动,就会产生信号,因为“扫描”调用被EINTR中断(系统调用中断)。
由于串口上的读写操作,有没有“scanf”不会被中断的方法?
答案 0 :(得分:0)
如果使用SA_RESTART
标志安装信号处理程序,read()
和write()
调用将不会在Linux中返回EINTR
错误; scanf()
系列标准I / O函数(因为它们在内部使用read()
)也不会。有关详细信息,请参阅man 7 signal部分“信号处理程序中断系统调用和库函数”。尽管此行为是特定于系统的,但我使用的所有其他类Unix系统的行为方式都相同。 - Nominal Animal