Используйте файл в качестве буфера для системы потребителя производителя двух программ - PullRequest
0 голосов
/ 23 сентября 2011

У меня есть две программы, одна из которых записывает некоторые записи в файл, а другая читает все записи из файла и обрабатывает их.

В настоящее время файлы выполняются последовательно. Это означает, что первая программа полностью создает файл и завершает работу до запуска второй программы. Теперь я хочу без особых изменений, чтобы вторая программа могла запускаться одновременно в режиме «производитель-потребитель». Я знаю, что должен использовать межпроцессное взаимодействие, но на этом этапе я хочу внести минимальные изменения в программы, чтобы запустить их.

В частности, я хочу, чтобы вторая программа обрабатывала записи из второго файла в реальном времени, так как они генерируются первым файлом.

Я использую gcc в Ubuntu 11.04

1 Ответ

3 голосов
/ 23 сентября 2011

Если вы используете Unix-подобную операционную систему, могу ли я предложить pipe ? Измените вашу первую программу для записи в стандартный вывод (вместо открытия файла и передачи ссылок, которые ofstream вокруг, передайте std::cout). Измените вашу вторую программу, чтобы читать со стандартного ввода (то же самое, но замените ваши ссылки ifstream на std::cin).

Тогда вместо

prog1 -o some-tmp-file.txt
prog2 -i some-tmp-file.txt

сделать это:

prog1 | prog2

<ч /> РЕДАКТИРОВАТЬ : Если ваши существующие программы основаны на <cstdio> вместо <iostream>, применяется тот же принцип. Используйте stdout вместо существующего FILE* в первой программе. Использует stdin вместо вашего FILE* во второй программе.

<ч /> EDIT # 2 : Если вы хотите абсолютно не вносить изменений во вторую программу и, возможно, только в минимальные изменения в первой программе, попробуйте использовать именованные каналы .

mkfifo /tmp/some-tmp-file.txt
prog2 -i /tmp/some-temp-file.txt &
prog1 -o /tmp/some-temp-file.txt
...