select系统调用适用于类似的应用程序。您可以做其他工作或睡眠,然后定期检查FD_SET的状态。如果你的程序除了获取数据之外什么都不做,那么这对你正在做的事情来说甚至可能有些过头了。
当前,我正在以以下方式读取串行端口的CTS和DSR信号:
bool get_cts(int fd) {
int s;
ioctl(fd, TIOCMGET, &s);
return (s & TIOCM_CTS) != 0;
}
现在我想等到get_cts()
返回true。我认为简单的循环不是最好的解决方案(因为它非常耗费资源)。
void wait_cts(int fd) {
while(1) {
if(get_cts(fd)) {
return;
}
}
}
在Linux上使用C或C++有更好的解决方案吗?(我不能使用任何硬件流量控制,因为我根本不需要串行数据线。)
有一个ioctl TIOCMIWAIT
,它会阻塞,直到给定的一组信号发生变化。
遗憾的是,tty_ioctl(4)
页面和ioctl_list(4)
中都没有记录此ioctl。
我在这个问题中了解了这个ioctl:
Python监视器串行端口(RS-232)握手信号