c++ - 如何使读取功能不挂起?

标签 c++ serial-port posix virtual-serial-port

我正在使用 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/

相关文章:

c++ - 关于C++ rest sdk和同步调用

linux - 在 Mono 中锁定 Linux 串行端口或其他设备

serial-port - screen /dev/ttyUSB0 具有不同的选项,例如数据位、奇偶校验等

Clang 无法编译 c11 程序,引用 "implicit declaration is illegal in c99"

c++ - C++ 1z中的编译时反射?

c++ - char 缓冲区初始化的标准行为

c - 如何使用 C 通过串行端口将十六进制数据发送到自定义仪器中?

c - printf 是否总是在遇到换行符时刷新缓冲区?

perl - 为什么我不从我的子进程中获取退出状态?

c++ - 异步 ReadDirectoryChangesW()?