Используйте popen
, если вы хотите выполнить команду оболочки и хотите, чтобы родительский процесс мог общаться с дочерним процессом. (Он перехватывает ввод или вывод дочернего элемента до потока, который вы возвращаете.) В противном случае, предпочтите семейство функций exec
(вероятно, в сочетании с fork
); Процессы exec
d наследуют большинство открытых дескрипторов файлов (включая stdin, stdout и stderr), так что вы можете перехватывать входные данные и вплоть до того, что вам нравится ... плюс, меньше последствий для безопасности
system
обычно лучше избегать, если вам не нужно запускать команды оболочки. Он запускает оболочку для запуска команды, и оболочка может анализировать команду любым удобным для нее способом. В частности, некоторые переменные среды (например, $IFS
и / или $PATH
) могут быть изменены таким образом, чтобы родительский элемент мог выполнять программы, для которых вы никогда не предназначали его. Хотя popen
, кажется, делает то же самое, он, по крайней мере, обеспечивает функциональность, которая делает его полезным в общем случае.