до сегодняшнего дня, когда я запускал дочернюю программу в своем приложении (распределенные вычисления), я использовал execv, и в качестве аргумента я передавал имя файла, в котором хранилась полезная нагрузка.
Итак, у меня было два файла:
1) child-program.binary(+x)
2) child-program.payload(+r)
Когда child-program.binary выполнялся, он знал, что он должен загружать child-program.payload при запуске, затем выполнялись вычисления, а новая полезная нагрузка хранилась в файле child-program.payload.
я хотел бы изменить это и вместо хранения полезной нагрузки на жестком диске, я бы хотел запустить двоичный файл и передать полезную нагрузку по-другому, может быть, через каналы?
Кроме того, мне нужно сохранить двоичный файл на жестком диске, чтобы он мог его запустить? Нет ли какой-либо другой памяти, такой как опция для выполнения чего-то?
Каковы возможные варианты?
Спасибо всем !
Преимущество вашего файлового подхода заключается в том, что он является энергонезависимым, и данные могут быть легко распределены по всему миру в виде файла.
Основываясь на вашей мысли о трубах, я предполагаю, что ваши "распределенные вычисления" находятся на одном узле. Вы также можете использовать общую память: shm_open и передать имя имени файла вашей общей памяти ребенку. КСТАТИ. Трубы или FIFO позволяют легко синхронизировать с помощью poll/select. AFAIK вам нужно немного больше инфраструктуры для синхронизации доступа к общей памяти.