Код, который вы написали, работает для меня в простой тестовой программе, которая больше ничего не делает. Помните, что когда вы вызываете execl, процесс сохраняет все старые файловые дескрипторы. Поэтому, каким бы ни был стандартный вывод при вызове execl, он будет таким же, когда загружается новый двоичный файл. Если вы хотите, чтобы вывод выводился на терминал, просто убедитесь, что стандартный вывод идет на терминал.
Если вы хотите выполнить ввод / вывод с другой программой, для этого подойдет popen (как упоминалось в mgb). Он запустит новый процесс, настроит для вас подключение, вызовет какой-то вариант exec и вернет дескриптор файла, который вы можете использовать для связи.