使用istream从命名管道读取

Dan*_*ani 3 c++ linux named-pipes

是否可以使用流使用c ++(stl)从命名管道(mkfifo)读取 - 因此没有事先char *buffer[MAX_SIZE]为读取操作定义?

我想读取,直到缓冲区结束并将结果放入std::string.

(当前方法:bytes = read(fd, buffer, sizeof(buffer));需要提前分配某种缓冲区.)

Kon*_*lph 6

创建的命名管道的mkfifo行为类似于常规文件.因此可以使用std::ifstream和访问它们std::ofstream:

#include <fstream>
#include <iostream>

int main(int, char** argv) {
    std::ifstream file{argv[1]};
    std::string line;
    std::getline(file, line);
    std::cout << line << '\n';
}
Run Code Online (Sandbox Code Playgroud)

跑:

mkfifo foobar
./main foobar
Run Code Online (Sandbox Code Playgroud)

其他地方:

echo 'Hello world!' > foobar
Run Code Online (Sandbox Code Playgroud)

...这将导致./main将"Hello world!"打印到标准输出.

  • @Dani您可以像任何其他流一样阅读它(参见[others](http://stackoverflow.com/q/116038/1968)).如果您的程序正在运行而其他一些进程正在填充它,程序将读取,直到另一个进程关闭管道. (2认同)