c++ - 如何监控 FIFO 的读取和写入?

标签 c++ c linux fifo

应该如何监控通过 FIFO 的数据?简单地打开并继续观察是行不通的,因为如果监视器读取所有字节,则需要数据的实际程序将无法接收数据。

最佳答案

我不确定你那里有什么样的 FIFO(管道?套接字?也许你应该更详细地说明你的问题),但我知道前向阅读的唯一情况是套接字。

您可以将 recv() 与标志 MSG_PEEK 一起使用,效果如下:

This flag causes the receive operation to return data from the beginning of the receive queue without removing that data from the queue. Thus, a subsequent receive call will return the same data.

您也可以使用套接字实现 IPC ( unix(7) ),因此您可能希望将它们添加到您的项目中(如果您使用的是 linux/unix)。如果您想知道如何使用套接字,那么您应该阅读手册页:socket(2)socket(7)或者在 Windows 的情况下,recv()socket() .

您可能还想尝试使用 2 个 FIFO,一个到您的显示器,另一个从您的显示器到您的实际程序。然后你只需用你的显示器读取所有传入的数据并过滤相关部分并将它们直接写入你的实际程序。如果您的实际程序中有多个接收器并且想要拆分传入数据,这可能会派上用场。

如果只是想知道是否有数据可读,可以使用select(2) or pselect(2)或者也许 poll(2) , 或 select()

关于c++ - 如何监控 FIFO 的读取和写入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11893940/

相关文章:

c - malloc() 并分配 : C code in run well in OS X; not in Win 8. 1

python - 'conda list'、 'conda --version' 和 'conda install' 不起作用

linux - 使用 Sed 从文本文件中删除一行

linux - Linux 中的进程 ID 是否为非负数?

c++ - 改变字母的颜色

c++ - OpenCV:cv::mat 是否像 shared_ptr?

c++ - 即使选择了指向 ATL 的静态链接,Atl71.dll 依赖性仍然存在

java - 将 jobject 与值相关联

c++ - 异常和复制构造函数 : C++

c - 为什么这个结构不编译?