Я пишу мини-оболочку UNIX на Ubuntu и сейчас пытаюсь добавить встроенные команды. Когда это не встроенная команда, я разветвляю ее, а затем ее выполняет дочерний элемент, однако для встроенных команд я просто выполняю ее в текущем процессе.
Итак, мне нужен способ узнать, существуют ли файлы (если они существуют, это не встроенная команда), однако execvp использует переменную среды PATH для их автоматического поиска, поэтому я понятия не имею, как я буду вручную проверять заранее.
Итак, ребята, вы знаете, как я могу проверить аргумент, чтобы увидеть, является ли он встроенной командой, просто указав имя?
Спасибо, парни.
test
— это встроенная оболочка; она выполняется оболочкой, даже если вы пишете тестовую программу с именемtest
, если вы вызываетеtest
без пути (но если вы указываете путь, то используется ваша программа./test
). Это вызывает путаницу при первом программировании в Unix. Точно так же, если я создаю команду с именемcd
, оболочка игнорирует ее и вызывает свою встроенную команду, когда имя простоcd
(но, как и раньше, если в имени команды есть путь, такой как./cd
, то это вызывается оболочка). - person Jonathan Leffler   schedule 07.10.2012