Автор оригинала: Sandesh Patil.
Обо мне
Я учитель и разработчик. Я закончил свои мастера в компьютерной технике. Я учил с 2011 года и кодировал с момента моих студенческих дней. Я работал в нескольких компаниях по разработке программного обеспечения, чтобы помочь создать свою продукцию.
Я также сделал много весело проекты. Я делюсь одним из них здесь.
Проблема, которую я хотел решить
Я наткнулся на один такой весело Проект, когда я работал в качестве онлайн-репетитора. Проект был о написании своих Linux Shell. . Я хотел работать над этим, так как это был первый раз, когда я бы разрабатывал что-то в этом роде.
Что такое мини Linux Shell?
Mini Linux Shell — это программа, которая ведет себя точно, лежит раковину Linux, хотя и с ограниченной функциональностью.
- Он поддерживает встроенные команды оболочки, такие как «CD» и «EXIT».
- Он поддерживает перенаправление ввода и вывода.
- Он поддерживает фоновый процесс.
Tech Stack.
Поскольку это раковина Linux, единственный возможный язык для использования был C . ; Как это родной для Linux. Кроме того, Posix Библиотека была необходима для реализации оболочки.
Процесс построения оболочки
Было трудно подумать, откуда начать. Я имел дело с вилка ()
функция в первый раз. вилка ()
Создает дочерний процесс, который может работать одновременно с родительским процессом в системе. Детский процесс может быть предоставлен другой задачей для выполнения. В этом случае дочерний процесс выполнит команду, набранную пользователем в оболочке. Так что я начал читать о вилка ()
Отказ Я, конечно, начался с Человек страница для вилка ()
Отказ Но этого было недостаточно, поэтому я прочитал некоторые статьи, которые объяснили использование вилка ()
с примерами.
Сейчас вооружен этими знаниями, я пошел дальше, чтобы найти, как ребенок будет выполнять команду, введенную пользователем. Должен ли я код для всех возможных команд? Ну, ответ был нет Отказ В Linux есть действительно полезная семейство функций, а именно. EXEC ()
Отказ Эти функции помогают один выполнить команду в Linux. Поэтому я прочитал Человек страница Для этого и узнал, что execvp ()
Функция — лучший матч для моего кода.
С помощью этого отсортированы, следующее было просто логично кодировать всю программу оболочки, что оказалось довольно простым. Вы можете найти весь код на Github здесь .
Проблемы я столкнулся
Самые сложные части были понимания использования вилка ()
и установка Обработчик сигналов Отказ
Обработчик сигналов требуется в качестве этой оболочки поддерживает фоновые процессы. Детский процесс, который отправляется на задний план, должен сигнализировать родительский процесс после его выполнения с его выполнением. Это можно сделать с помощью weepepid ()
Функция с Wnohang
вариант. Я должен был прочитать несколько статей на эту тему, чтобы правильно понять ее.
Назначение ключей
Новые вещи, которые я узнал
вилка()
execvp ()
- Обработка сигнала
Советы и советы
Лучший способ решать огромную проблему — это сломать его на меньшие части, а затем атаковать одну роль за раз. Я начал с создания дочернего процесса, а затем переместился на выполнение команды пользователя. После этого было сделано, я реализовал поддержку фоновой части процесса.
Окончательные мысли и следующие шаги
Такие проекты могут показаться действительно трудными, и мы можем подумать, что реализация может полностью пойти на своих головах (особенно для новичков). Но это не причина сдаваться. Если кто-то продолжает пытаться решить эту проблему, в конце концов, они получат успех и узнают много новых вещей на пути.
Этот проект научил меня много, но теперь он больше ничего не предлагает. Так что я не буду задерживаться на это больше. Многое новые весело Проекты ждут!
Оригинал: «https://www.codementor.io/@sandesh87/how-and-why-i-built-a-mini-linux-shell-using-c-1dqk5olxgw»