问题描述
我的串口配置与此链接中的配置接近: Serial-programming-HOWTO 在非规范输入模式下。这是我发生问题的代码:
char buffer;
int received;
while (true) {
received = read(serial_com,&buffer,sizeof(buffer));
if (received < 0) {
perror("error reading") << endl;
cout << "error no." << errno;
//exit(1);
}
cout << buffer;
}
在我读取一个字符后,有时它返回读取的字符,有时它给我这个错误:
error reading: Input/output error
error no.5
我还注意到,当我打印变量 received
时,它首先打印 0
,然后打印 -1
,然后打印提到的错误。
解决方法
很可能您正在尝试以比输入更快的速度读取数据 - 如果您尝试读取一个字符,当没有可用字符时,这确实是一个 IO 错误。
你有几种可能性:
- 使用阻塞模式(这将在调用
read()
时冻结程序,直到数据可用 - 使用
select
确保您只尝试阅读(如果有可用字符) - 使用特定于平台的机制(如
epoll
) - 使用库(如
libev
)来抽象出这些问题。