1

我正在使用 socat 创建一个虚拟串行端口:

socat PTY,link=/dev/ttySV0,echo=1 PTY,link=/dev/ttySV1,echo=1

在我用 C++ 编写的程序中,我打开 ttySV1 端口并开始读取。

读取功能在一段时间内,但问题是读取功能挂起,直到我将数据发送到端口。如果缓冲区中没有数据,您知道如何使 taht 函数不挂起并退出吗?

编辑:我使用以下方法将数据发送到端口:

echo [data] > /dev/ttySV0
4

2 回答 2

2

您还可以根据所运行的操作系统使用系统读取功能。详情应在 man (3) 下阅读。

您必须使用 fnctl 设置 O_NONBLOCK。如果管道 / FIFO 当前为空,这将导致您的读取失败。我检查了 Linux 的手册页,但它们在大多数基于 POSIX 的系统中应该是类似的行为。

于 2010-10-23T00:19:50.650 回答
1

一种方法是使用 select() 方法来查看是否有要读取的数据。这个或在谷歌上找到的其他东西(我搜索了“bsd sockets select”)应该会引导你走上正确的道路。

于 2010-10-23T00:12:21.133 回答