如何使读取功能不挂起?

时间:2010-10-23 00:02:44

标签: 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

2 个答案:

答案 0 :(得分:2)

您还可以使用系统读取功能,具体取决于您运行的操作系统。 细节应该在man(3)下阅读。

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

答案 1 :(得分:1)

一种方法是使用select()方法查看是否有要读取的数据。 This或谷歌上发现的其他内容(我搜索过“bsd套接字选择”)应该引导您走上正确的道路。