Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/135.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无内存操作的FIFO C++读取 我想从C++代码中使用一个FIFO缓冲区。 有两个进程,一个总是写入FIFO,另一个总是读取FIFO。这很简单_C++_Linux - Fatal编程技术网

无内存操作的FIFO C++读取 我想从C++代码中使用一个FIFO缓冲区。 有两个进程,一个总是写入FIFO,另一个总是读取FIFO。这很简单

无内存操作的FIFO C++读取 我想从C++代码中使用一个FIFO缓冲区。 有两个进程,一个总是写入FIFO,另一个总是读取FIFO。这很简单,c++,linux,C++,Linux,我真的不需要读取缓冲区的内容,我只想知道缓冲区中有多少数据,然后清除它 < C++中最复杂的解决方案是什么? 此代码运行良好,但我从不需要缓冲区的内容: int num; char buffer[32]; num = read(FIFO, buffer, sizeof(buffer)); //num is the important variable 谢谢大家! 我不知道你说得对不对,老练-你是说最有效的,还是最模糊的 无论如何,如果您不需要缓冲区内容,您可以使用共享联锁变量。您可以看看这个

我真的不需要读取缓冲区的内容,我只想知道缓冲区中有多少数据,然后清除它

< C++中最复杂的解决方案是什么?

此代码运行良好,但我从不需要缓冲区的内容:

int num;
char buffer[32];

num = read(FIFO, buffer, sizeof(buffer));
//num is the important variable

谢谢大家!

我不知道你说得对不对,老练-你是说最有效的,还是最模糊的


无论如何,如果您不需要缓冲区内容,您可以使用共享联锁变量。

您可以看看这个问题:


在linux上,套接字代码也应该在FIFO上以最小的工作量工作。不过,我不确定Windows。

据我所知,从linux FIFO中清除字节的唯一方法是读取字节,而不是销毁FIFO。通过一次读取大量数据,您可以更快地清除它们。32是一个非常小的读取大小,除非它是通常写入FIFO的大小。如果您处于阻塞模式,则应按照Robert Mason指示的链接中所述查询字节。如果描述符处于非阻塞模式,则可以一直读取,直到返回EAGAIN,才知道它已被清除。您可以使用轮询来确定FIFO上何时有更多数据到达。

清除管道的唯一方法是读取它,因此存在多少字节的问题是没有意义的-您将在读取它们后知道。真正的问题最终与任何阅读一样:

1如果您不关心数据,那么您可能不想阻塞等待数据,因此使FIFO不阻塞


2由于您可能不想坐下来浪费时间轮询FIFO以查看是否有内容可读,因此应将FIFO fd放入select语句中。当有东西要读时,把它排干,加到计数器上。

你的帖子不清楚。这是什么先进先出?您想要实现什么?什么样的进程间协议使用缓冲区长度来传递重要变量?FIFO是使用mkfifo函数创建的文件描述符。一个进程不断地向fifo写入数据,另一个进程从中读取数据。我只需要知道另一个过程仍然存在。这就是为什么缓冲区本身并不重要的原因。如果我能读,没关系。-1:答案在哪里?你没有给出任何有价值的建议。@Kirill Kobelev:你是对的,这不是一个完整的答案,但这是一个有价值的建议。创建一个共享内存区域API取决于我猜的操作系统,您只需对属于共享内存的单个整数变量执行互锁操作,即不锁定、内存复制等。