我正在Linux平台上工作。我有一个基于控制台的多线程应用程序,它为其他功能加载多线程共享对象库。共享对象库在内部打开一个串行端口进行通信。该库使用“打开”、“读取”和“写入”Linux 系统调用进行串行通信。串行通信使用信号处理程序来接收数据。控制台应用程序中的主线程等待“scanf”语句,以获取用户的输入。
每当串行端口上有任何活动时,都会生成信号,因此“scanf”调用会被 EINTR(中断的系统调用)中断。
有没有什么方法可以让'scanf'不会因为串口上的读写操作而被中断?
如果您安装带有SA_RESTART
标志的信号处理程序,read()
并且在 Linux 中write()
调用不会返回错误;EINTR
标准 I/O 函数系列也不会scanf()
(因为它们在read()
内部使用)。有关详细信息,请参阅man 7 signal部分“信号处理程序中断系统调用和库函数”。尽管这种行为是特定于系统的,但我使用过的所有其他类 Unix 系统的行为方式都相同。– 标称动物