我正在尝试从Linux读取uart串行数据。 我有2个串行设备映射到linux文件系统,例如:ttys1和ttys2。 之后,使用open()获取FD:
int fd1 = open("ttys1", O_RDWR | O_NOCTTY);
int fd2 = open("ttys2", O_RDWR | O_NOCTTY);
例如,此调用位于对象构造函数中,而应用程序处于空闲状态
在“运行”状态下,我想从此设备记录uart数据。
我有一个线程正在调用start()方法,该方法创建一个epoll并将fd1和fd2添加到epoll进行监视:
for(int i = 0 ; i < 2; i++)
{
events[i].events = EPOLLIN | EPOLLERR | EPOLLET ;
events[i].data.fd = (i == 0) ? fd1 : fd2;
if(epoll_ctl(epollFD, EPOLL_CTL_ADD, events[i].data.fd, &events[i]))
{
fprintf(stderr, "Failed to add file descriptor to epoll\n");
close(epollFD);
return;
}
else
{
cout << "Succesfully added File Descriptors to ePoll" << endl;
}
}
此后,我有一个正在运行的线程正在等待epoll事件,并使用epoll_wait()读出数据
我的问题是,第一个事件包含大量要忽略的数据。如果通常在每次epoll等待之后我从每个uart设备中获取1-10个字节,则在第一帧中我从这些设备中获取了缓冲数据,但是我只想在将fd添加到epoll之后监视流量。有任何想法吗 ?谢谢!