pipe — отправка команды cat в код c ++ несколько раз

Если я хочу прочитать файл несколько раз с командой ./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

Решение

Содержимое трубы потребляются когда они читаются, вам нужно сохранить эти значения в памяти, если вам нужен многоходовой алгоритм, вы можете распаковать и запустить файл, иначе вы можете разбить вашу программу на несколько этапов и запускать их один за другим:

// 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 ...
3

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector