管道工具时空stdin

时间:2016-03-23 18:52:44

标签: c++ unix pipe

我花了一整天的时间来研究如何制作我的工具" mybin"能够被放入管道。

想象一下,file.txt是一个数字列表,每行一个。我希望能够做到

cat file.txt | mybin

如果我直接从标准输入读取,这将失败,尽管以下内容将成功

mybin < file.txt

所以我查看了管道,并且有很多来源重复创建流程,分叉和创建管道以供父母和孩子沟通的相同信息。但是当管道来自外部源时没什么用处。

我认为,我的问题是如何在内部初始化管道以便在&#34; cat file.txt&#34;之后连接到管道。

让您了解我目前正在做的事情:

int fd[2];
pipe(fd);
dup2(STDIN_FILENO, fd[0]);
boost::iostreams::stream<boost::iostreams::file_descriptor_source> is(boost::iostreams::file_descriptor_source(fd[0], boost::iostreams::never_close_handle));

此时我几乎有一个常用的C ++流,并继续在循环中使用std::getline

使用&#34;&lt;&#34;命令的版本seekg(0, is.end)返回正值,但是当我使用&#34; |&#34;命令版本seekg(0, is.end) == -1。 这就是为什么我认为我的问题是我需要将除STDIN_FILENO之外的其他内容复制到我的输入管道上。

感谢您的帮助。

0 个答案:

没有答案