Семейство вызовов execX () не обладает такой же гибкостью, как, например, system () или popen ().Эти последние методы вызывают shell для интерпретации команды.
Аргументы вызова execX - это точный путь к программе, которую вы хотите запустить, и аргументы, которые вы хотите дать этой программе.Любые функции «оболочки», такие как перенаправление, которые вы должны реализовать самостоятельно перед вызовом execX.
В качестве альтернативы, вы можете позволить shell фактически выполнять работу, execp("sh","sh",myexe+" >test.txt");
, но это лениво, и тогда почему бы просто не использовать systemв любом случае?
Два очень полезных метода - это pipe () и dup2 (): pipe позволяет создавать каналы для вашей хост-программы;dup2 позволяет вам установить сценарий, в котором выполняемая программа думает, что пишет в stdout (1) или читает из stdin (0), но на самом деле пишет или читает созданный вами файл или канал.
Вы пройдете долгий путь, прочитав справочные страницы для pipe и dup2, или в google, ища exec pipe и dup2, так что я не откажусь от вашего удовольствия, написав полную реализацию здесь.