C++ 在Linux中如何有效地等待RS232的CTS或DSR?

C++ 在Linux中如何有效地等待RS232的CTS或DSR?,c++,c,linux,serial-port,wait,C++,C,Linux,Serial Port,Wait,目前,我通过以下方式读取串行端口的CTS和DSR信号: bool get_cts(int fd) { int s; ioctl(fd, TIOCMGET, &s); return (s & TIOCM_CTS) != 0; } 现在我想等待get\u cts()返回true。我认为一个简单的循环并不是最好的解决方案(因为它非常耗费资源) Linux上有没有使用C或C++的更好的解决方案?(我不能使用任何硬件流控制,因为我根本不需要串行数据线。)选择系统

目前,我通过以下方式读取串行端口的CTS和DSR信号:

bool get_cts(int fd) {
    int s;
    ioctl(fd, TIOCMGET, &s);
    return (s & TIOCM_CTS) != 0;
}
现在我想等待
get\u cts()
返回true。我认为一个简单的循环并不是最好的解决方案(因为它非常耗费资源)


<> Linux上有没有使用C或C++的更好的解决方案?(我不能使用任何硬件流控制,因为我根本不需要串行数据线。)

选择系统调用适用于此类应用程序。您可以执行其他工作或睡眠,然后定期检查FD_集的状态。如果你的程序除了抓取数据之外什么都不做,那么对你正在做的事情来说,这甚至可能是杀伤力过大。

有一个ioctl
TIOCMIWAIT
,它会阻止一组给定的信号发生变化

遗憾的是,这个ioctl没有记录在
tty\u ioctl(4)
页面中,也没有记录在
ioctl\u列表(4)

我在这个问题中了解了这个ioctl:


有什么原因让你在循环中睡不着觉吗?我可以这样做,但没有其他解决方案吗?它现在在Linux上的tty_ioctl(2)中。
void wait_cts(int fd) {
    while(1) {
        if(get_cts(fd)) {
             return;
        }
    }
}