我花了一整天的时间来研究如何制作我的工具" 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
之外的其他内容复制到我的输入管道上。
感谢您的帮助。