Как я могу реализовать свою собственную основную оболочку Unix в C?

У Joel Spolsky есть превосходное Партизанское Руководство по Интервьюированию , который говорит о, среди других вещей, программируя задачи.

Мелочи: Joel Spolsky является соучредителем stackoverflow.com

23
задан Andrew T. 15 December 2015 в 02:45
поделиться

3 ответа

Все оболочки unix имеют открытый исходный код, поэтому для начала лучше прочитать код.

Если вы ищете хорошую начальную статью по этой теме, попробуйте Написание собственной оболочки из Linux Gazette.

Еще одна хорошая отправная точка - взглянуть на исходный код мини-оболочки только потому, что это одна из самых маленьких

14
ответ дан 29 November 2019 в 02:46
поделиться

Your main loop is:

  • read a line (use fgets(3) for a simple shell, readline(3) for a fancy one)
  • parse the command
  • fork and execute the pipelines

To parse the command, there are two common choices. Write a recursive descent parser or use yacc(1) to generate one. It's a lot easier to bang out an initial parser using yacc, but you can totally get stuck debugging it and it really wants to be context-free. I prefer recursive descent but just about everyone else in the world prefers using yacc. (Technically, bison.) If the shell is really really simple, like a homework shell, yacc may be overkill.

To do the lexical analysis you can also roll your own or use flex.

You won't need to use any threads.

8
ответ дан 29 November 2019 в 02:46
поделиться

Многие книги по Unix, описывающие основные системные вызовы, также реализуют оболочку, чтобы проиллюстрировать, как и почему вы можете использовать различные вызовы. Стивенс и Рохкинд - две такие книги:

4
ответ дан 29 November 2019 в 02:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: