Написание собственной оболочки на C, как запустить исполняемые файлы Unix ?

В одном из моих курсов мы пишем нашу собственную оболочку (в основном с нуля).

Мы уже написали лексер и синтаксический анализатор для разделения ввода на красивые «командные» структуры, с которыми легче работать. Точно так же у меня есть функция read_command () , которая будет читать по одной команде за раз и выяснять, какой это тип команды (pipe / и / или / simple / и т. Д.).

Теперь я пытаюсь написать функцию execute_command (struct command cmd) , которая фактически принимает команду и запускает ее. Я не понимаю, как вообще начать писать эту функцию.

Допустим, я получил в качестве команды очень простой cat foo.txt . Моя командная структура аккуратно разделит его, так что у меня есть массив слов с обоими словами в нем.

Теперь я хочу запустить исполняемый файл cat с аргументом foo.txt . Я понимаю, что мне следует использовать переменную $ PATH , чтобы попытаться найти исполняемый файл, а затем запустить его с этим аргументом.

Я не могу ответить на несколько важных вопросов:

  1. Как на самом деле искать команду cat ? Имейте в виду, что эта программа использует C. Какие функции я могу использовать для поиска в каталогах? Как мне использовать PATH для этого?
  2. Когда я нахожу команду cat , как я могу запустить ее с foo.txt в качестве параметра? Как это можно сделать в C?
6
задан Bill the Lizard 19 September 2012 в 01:53
поделиться