Программы, работающие параллельно, чтение / запись на C

Я рассматриваю набор из 4 программ: (Prog1, Prog2, Prog3, Prog4), взаимодействующих с 4 файлами (FileA, FileB, FileC, FileD)

  • Prog1: пишет (добавляет) в FileA
  • Prog2: читает файл A и записывает (добавляет) в файл B
  • Prog3: читает файл A и записывает (добавляет) в FileC
  • Prog4: читает файл B и записывает (добавляет) в FileD

или Потенциально Prog1, может также читать при запуске и писать постоянно, чтобы сказать FileX.

Теперь все 4 программы будут работать одновременно (потенциально по сети, но это не должно иметь значения). Будет ли это работать?

Нужно ли мне устанавливать сигналы "Strobes" или "busy" (я мог бы сделать это, скажем, с помощью mkdir и rmdir)?

3 ответа

Решение

Я думаю, что вам нужна какая-то реальная структура FIFO здесь, также называемая трубами. Существуют конструкции с таким именем в ОС Windows и Unix-flavor.

Пример под Linux можно найти здесь, именованные каналы под Windows здесь

Ваша проблема заключается в синхронизации чтения / записи? Записи являются более проблемной частью, поскольку они изменяют содержимое. Кроме того, характер написания (добавить в конце, добавить в начале и т. Д.) Может еще больше осложнить вашу ситуацию. У меня есть ощущение, что вам, возможно, придется искать "блокировки файлов"/ мьютексы и т. Д. Многое зависит от ОС (-ей), на которой вы планируете их запускать. Boost.Interprocess это хорошее место для начала.

Это можно заставить работать. Вам необходимо определить, какой процесс открывает каждый файл и откуда поступают данные, которые записывает Prog1.

Если каждая программа открывает файлы, с которыми работает, то никаких серьезных проблем не возникает. Основная проблема та же, с которой приходится сталкиваться с "tail -f", а именно то, что каждый из процессов чтения, скорее всего, читает в EOF, а затем должен остановиться и повторить попытку, чтобы увидеть, когда станет доступно больше данных.

Если у вас есть центральный процесс, который открывает все файлы, то вам нужно открыть файл A для чтения дважды, чтобы Prog2 и Prog3 имели независимый доступ к файлу. Однако для любого координирующего процесса более разумно просто сказать детям, какие файлы открывать.

Я не вижу необходимости в стробоскопах или сигналах занятости. Вы не предупреждали о каких-либо требованиях к ответу "почти в режиме реального времени" или других особых условиях, которые могут потребовать специального программирования.

Другие вопросы по тегам