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