Input/Output 在 Unix 中从串口读取时出错

Input/Output error when reading from serial port in Unix

我对串口的配置接近于这个link: 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;
    }

在我读取一个字符后,有时它 returns 读取的字符,有时它会给我这个错误:

error reading: Input/output error 
error no.5

我一运行程序就出现这个错误。我该如何解决这个问题?

我还注意到,当我打印变量 received 时,它首先打印 0,然后打印 -1,然后打印提到的错误。

很可能您正在尝试读取数据的速度比数据进来的速度快 - 如果您尝试读取一个字符,当 none 可用时,这确实是一个 IO 错误。

你有几种可能性:

  • 使用阻塞模式(这会在 read() 调用时冻结程序,直到数据可用
  • 使用 select 确保您只尝试阅读,如果有可用的字符
  • 使用特定于平台的机制(如epoll
  • 使用库(如 libev)来抽象掉这些问题。