Семья exec - PullRequest
       8

Семья exec

4 голосов
/ 29 сентября 2008

У меня есть проект, который требует использования семейства exec. Мой проект состоит из создания интерактивной оболочки. Оболочка будет реализовывать несколько основных команд, таких как cd, ls, echo и т. Д. Я изучал использование exec, но не нашел полезного сайта. Любые предлагаемые ссылки помогут.

int ret;
ret = execl ("/bin/ls", "ls", "-1", (char *)0);

Как я могу получить вывод этой операции, чтобы показать на экране?

Ответы [ 2 ]

4 голосов
/ 29 сентября 2008

делает

int fd = 1;
dup(fd);
close(fd);

возвращает вывод на экран.

2 голосов
/ 29 сентября 2008

Код, который вы написали, работает для меня в простой тестовой программе, которая больше ничего не делает. Помните, что когда вы вызываете execl, процесс сохраняет все старые файловые дескрипторы. Поэтому, каким бы ни был стандартный вывод при вызове execl, он будет таким же, когда загружается новый двоичный файл. Если вы хотите, чтобы вывод выводился на терминал, просто убедитесь, что стандартный вывод идет на терминал.

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

...