我正在使用socat创建一个虚拟串口:
socat PTY,link=/dev/ttySV0,echo=1 PTY,link=/dev/ttySV1,echo=1
在用C ++编写的程序中,我打开ttySV1端口并开始阅读。
读取功能有一段时间了,但问题是读取功能会一直挂起,直到我将数据发送到端口。你知道如何使taht函数不挂起,如果缓冲区中没有数据就退出吗?
编辑:我使用以下方法将数据发送到端口:
echo [data] > /dev/ttySV0
答案 0 :(得分:2)
您还可以使用系统读取功能,具体取决于您运行的操作系统。 细节应该在man(3)下阅读。
您必须使用fnctl设置O_NONBLOCK。如果管道/ FIFO当前为空,这应该导致读取失败。我检查了Linux的手册页,但在大多数基于POSIX的系统中它们应该是类似的行为。
答案 1 :(得分:1)
一种方法是使用select()方法查看是否有要读取的数据。 This或谷歌上发现的其他内容(我搜索过“bsd套接字选择”)应该引导您走上正确的道路。