我正在使用 socat 创建一个虚拟串行端口:
socat PTY,link=/dev/ttySV0,echo=1 PTY,link=/dev/ttySV1,echo=1
在我用 C++ 编写的程序中,我打开 ttySV1 端口并开始读取。
读取函数有一段时间了,但问题是读取函数挂起,直到我向端口发送数据。您知道如何使 taht 函数在缓冲区中没有数据时不挂起并直接退出吗?
编辑:我使用以下方式将数据发送到端口:
echo [data] > /dev/ttySV0
最佳答案
您还可以使用系统读取功能,具体取决于您运行的操作系统。 详情应该在 man (3) read 下。
您必须使用 fnctl 设置 O_NONBLOCK。如果管道/FIFO 当前为空,这将导致您的读取失败。我查看了 Linux 的手册页,但它们在大多数基于 POSIX 的系统中应该具有相似的行为。
关于c++ - 如何使读取功能不挂起?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4001760/