Im пытается получить мою программу для запуска команды оболочки из-за использования exelp()
. Пользователь в основном вводит команду оболочки, которая сохраняется и затем выполняется exelp()
в новой оболочке.Запуск команды оболочки с execlp() из строки
Скажем, пользователь вводит «ls -l/bin/??», который, в свою очередь, фиксируется переменной command[]
. Как я могу заставить эту текстовую строку выполнять в оболочке envionment.
Ближайший я пришел к пониманию того, как сделать это было бы, делая execlp("/bin/sh", "-c", command, (char *)NULL);
, где /bin/sh
запускает мини-оболочку, -c
позволяет оболочку брать строки, а второй последний аргумент просто строка захваченной ранее. Я знаю, что system()
является вариантом здесь, но я хочу сделать это с помощью execlp для образовательных целей.
Что мне здесь не хватает? Заранее спасибо.
В 'exec' нет вызова, который принимает одну строку аргументов. Вашими параметрами являются либо список строк, либо массив строк. Это означает, что перед использованием одного из вызовов 'exec' вам необходимо проанализировать свою входную строку в отдельные аргументы. Вы сделали это вручную. Теперь вам нужно сделать это программно. – Duck
Вы можете использовать 'execlp()' только в очень ограниченном количестве обстоятельств; вы должны знать количество аргументов во время компиляции. Вместо этого вы обычно используете 'execvp()'. –