В одном из моих курсов мы пишем нашу собственную оболочку (в основном с нуля).
Мы уже написали лексер и синтаксический анализатор для разделения ввода на красивые «командные» структуры, с которыми легче работать. Точно так же у меня есть функция read_command ()
, которая будет читать по одной команде за раз и выяснять, какой это тип команды (pipe / и / или / simple / и т. Д.).
Теперь я пытаюсь написать функцию execute_command (struct command cmd)
, которая фактически принимает команду и запускает ее. Я не понимаю, как вообще начать писать эту функцию.
Допустим, я получил в качестве команды очень простой cat foo.txt
. Моя командная структура аккуратно разделит его, так что у меня есть массив слов с обоими словами в нем.
Теперь я хочу запустить исполняемый файл cat
с аргументом foo.txt
. Я понимаю, что мне следует использовать переменную $ PATH
, чтобы попытаться найти исполняемый файл, а затем запустить его с этим аргументом.
Я не могу ответить на несколько важных вопросов:
cat
? Имейте в виду, что эта программа использует C. Какие функции я могу использовать для поиска в каталогах? Как мне использовать PATH для этого? cat
, как я могу запустить ее с foo.txt
в качестве параметра? Как это можно сделать в C?