将cat命令多次传递给c ++代码

时间:2015-05-12 06:28:19

标签: c++ pipe istream

如果我想使用命令./run in.txt多次读取文件,那么有一种直接的方法......

0- ofstream fin;

1- while (fin >> i) {...}

2- fin.clear(); fin.seekg(0);

3- while (fin >> i) {...}

但是,我想将压缩的输入文件传递给程序。命令是

bzcat file.bz2 | ./run

并且在代码中,我必须使用ofstream fin而不是std::cin

while (std::cin >> i) {...}

当bzcat将最后一行发送到程序时,循环终止。现在......问题是,我怎样才能回到起始位置并告诉bzcat请再次发送行(从第一个到结尾)我将用std::cin捕获它们?!

1 个答案:

答案 0 :(得分:3)

管道内容在读取时消耗,如果需要多通道算法,则需要将这些值保留在内存中,您可以解压缩并运行该文件,否则您可以拆分程序进入多个阶段并一个接一个地运行它们:

// 1
std::vector<int> data;
std::copy(std::istream_iterator<int>(std::cin), std::istream_iterator<int>(),
          std::back_inserter(data));
// operate on data

#2
$ bunzip2 file.bz2 && ./run file.bz2

# 3
$ bzcat file.bz2 | ./stage1 | ./stage2 ...
相关问题