@calculator212

Как можно передать ссылку/адрес на относительно большой файл из go в c++?

В общем такая проблема, что программа на го скачивает в память файл размером в среднем 10-15 мб , и его нужно обработать пока он в памяти и помещать на диск его не нужно, но обработку файла должна производить программа на c++, вопрос в том можно ли как-то передать адрес файла в памяти из одной программы в другую. Я думаю, что можно копать в сторону shared memory, но у нет с этим опыта работы и возможно есть способ проще это сделать.
  • Вопрос задан
  • 147 просмотров
Пригласить эксперта
Ответы на вопрос 4
@deliro
Конечно есть. Написать всё на одном языке. Или использовать временный файл. Или организовать IPC любым способом и передавать файл.
Ответ написан
Не стоит так делать - не шарьте память процессов. Может оторвать ногу.
Обменяйтесь данными, например, через локальный сокет.

Если все же есть острое желание сделать троллейбус из буханки хлеба, вот пример чего-то похожего https://stackoverflow.com/q/28778521
Ответ написан
Проще SharedMemory только сохранение на диск с последующим чтением файла другим процессом.
Ответ написан
Комментировать
@res2001
Developer, ex-admin
А если скачанный файл будет размером в гигабайты. Куда вы денете такой файл в памяти? По моему это не правильная стратегия.

Вы можете использовать shared memory для предоставления доступа к файлу. Но вам еще надо дать знать внешней программе, что память готова для ее обработки. А так же после обработки внешняя программа должна дать знать вашей программе, что она свою работу закончила. Тут уже не обойтись без механизмов IPC: каналы, именованные каналы, unix сокеты, eventfd, обычные сокеты, ...
Но если внешняя программа будет запускаться из вашей программы как дочерний процесс, то можно просто ждать завершения процесса. Но процесс может завершиться аварийно, так что надо анализировать код возврата, который процесс должен обязательно вернуть.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы