У Joel Spolsky есть превосходное Партизанское Руководство по Интервьюированию , который говорит о, среди других вещей, программируя задачи.
Мелочи: Joel Spolsky является соучредителем stackoverflow.com
Все оболочки unix имеют открытый исходный код, поэтому для начала лучше прочитать код.
Если вы ищете хорошую начальную статью по этой теме, попробуйте Написание собственной оболочки из Linux Gazette.
Еще одна хорошая отправная точка - взглянуть на исходный код мини-оболочки только потому, что это одна из самых маленьких
Your main loop is:
fgets(3)
for a simple shell, readline(3)
for a fancy one)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.
Многие книги по Unix, описывающие основные системные вызовы, также реализуют оболочку, чтобы проиллюстрировать, как и почему вы можете использовать различные вызовы. Стивенс и Рохкинд - две такие книги:
W Ричард Стивенс, Стивен А. Раго Расширенное программирование в среде Unix, 3-е изд.
Марк Дж. Рочкинд Advanced Unix Programming, 2nd Edn