如何使读取功能不会挂起?

问题描述:

我使用socat来创建一个虚拟串口:如何使读取功能不会挂起?

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

的,我用C++编写的程序,我打开ttySV1接口,即可开始阅读。

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

编辑:我将数据发送到使用的端口:

echo [data] > /dev/ttySV0 
+1

可以使用peek函数或多线程。 – JoshD 2010-10-23 00:04:01

根据您正在运行的操作系统,您还可以使用系统读取功能。 细节应该在人(3)阅读下。

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

+0

太棒了!我正在使用那个阅读功能(我的操作系统是Arch Linux)。不同之处在于O_NONBLOCK选项丢失。现在我把它和它的魅力工作。谢谢! – Tomas 2010-10-23 02:23:00

+0

很高兴工作。我喜欢处理系统API及其隐藏的选项和控制:) – CtRanger 2010-10-23 02:40:42

一种方法是使用select()方法来查看是否有要读取的数据。 This或谷歌上的其他东西(我搜索“bsd套接字选择”)应该引导你沿着正确的道路。