Linux программирование в примерах
Шрифт:
Рассмотрите следующие моменты:
• Собираетесь ли вы использовать возможности интернационализации?
• Какие команды должны быть встроены в оболочку?
• Чтобы быть полезной, в вашей оболочке должен быть механизм пути поиска команд, аналогичный
• Какие перенаправления ввода/вывода вы хотите поддержать? Только файлы? Также и каналы? Хотите ли вы иметь возможность перенаправлять нет только дескрипторы файлов 0, 1 и 2?
• Решите, как будут работать кавычки: одинарные и двойные? Или лишь одна разновидность?
• Как вы обработаете вызов команд в фоновом режиме? Что насчет ожидания завершения работы команды в фоновом режиме?
• Решите, будут ли у вас переменные оболочки.
• Какую разновидность символов подстановки или других расширений будете вы поддерживать? Как это взаимодействует с кавычками? С переменными оболочки?
• Вы должны запланировать по крайней мере операторы
• Решите, хотите ли вы разрешить перенаправления ввода/вывода для блочных операторов. Если да, как будет выглядеть синтаксис?
• Решите, как язык вашей оболочки должен обрабатывать сигналы, если он вообще это делает.
• Разработайте шаблон тестирования и отладки до того, как вы начнете программировать.
2. Если вы собираетесь использовать возможности интернационализации, делайте это с самого начала. Последующая ее вставка тяжела.
3. Для настоящей работы начните просто. Начальная версия должна читать одну строку за раз и разделять ее на слова для использования в качестве отдельных аргументов. Не используйте кавычек, перенаправления ввода-вывода или что-нибудь еще. Не старайтесь даже создать новый процесс для запуска введенной программы. Как вы собираетесь тестировать то, что у вас пока есть?
4. Добавьте кавычки так, чтобы отдельные «слова» могли содержать разделители. Реализует ли код для кавычек ваш проект?
5. Заставьте работать ваши встроенные команды. (По крайней мере две нужные встроенные команды см. в разделах 4.6 «Создание файлов» и 8.4.1 «Смена каталога:
6. Первоначально используйте фиксированный путь поиска, такой как "
7. Добавьте фоновое исполнение и, в качестве отдельной команды, ожидание завершения выполнения процесса (см. главу 9 «Управление процессами и каналы»).
8. Добавьте устанавливаемый пользователем путь поиска (см. раздел 2.4 «Переменные окружения»).
9. Добавьте перенаправление ввода/вывода для файлов (см. раздел 9.4 «Управление дескрипторами файлов»).
10. Добавьте переменные оболочки. Протестируйте их взаимодействие с кавычками.
11. Добавьте символы подстановки и другие расширения (см. раздел 12.7 «Расширения метасимволов»). Протестируйте их взаимодействие с
12. Добавьте конвейеры (см. раздел 9.3 «Базовое межпроцессное взаимодействие: каналы и очереди FIFO»). С этого момента начинаются настоящие сложности. Вам может потребоваться тщательно рассмотреть то, как вы управляете данными, представляющими запускаемые команды.
Здесь можно было бы остановиться с законным чувством достижения, если вы получили работающую оболочку, которая может делать все, упомянутое до сих пор.
13. Если вы принимаете дальнейший вызов, добавьте операторы
14. Добавьте обработку сигналов (см. главу 10 «Сигналы»).
15. Если вы хотели бы использовать свою оболочку для настоящей работы, изучите библиотеку GNU Readline (наберите в системе GNU/Linux '
Постоянно держите в уме две вещи- всегда имейте возможность протестировать то, что вы делаете; и «никаких произвольных ограничений»!
Когда все это сделано, проделайте анализ сделанного проекта. Как вы сделали бы его по-другому во второй раз? Удачи!
16.2. Рекомендуемая литература
1. The UNIX Programming Environment, by Brian W. Kernighan and Rob Pike. Prentice-Hall, Englewood Cliffs, New Jersey, USA, 1984. ISBN: 0-13-937699-2. [190]
Эта классическая книга по программированию на Unix, описывающая целостную структуру окружения Unix, от интерактивного использования до программирования оболочки, программирования с помощью функций
190
Русский перевод Брайан Керниган, Роб Пайк. UNIX: Программное окружение. Санкт-Петербург. Символ-Плюс, 2003 — Примеч. науч. ред.
Хотя возраст книги приличный, ее в высшей степени стоит прочесть, и мы ее чрезвычайно рекомендуем.
2. The Art of UNIX Programming, by Eric S. Raymond. Addison-Wesley, Reading, Massachusetts, USA, 2004. ISBN: 0-13-142901-9.
Это книга на более высоком уровне фокусируется на проблемах проектирования при программировании в Unix: как работают программы Unix и как разрабатывать свои собственные программы, чтобы уютно вписаться в окружение Linux/Unix. Хотя мы не всегда согласны со многим из того, что хочет сказать автор, книга действительно содержит значительное количество важного материала, и ее стоит прочесть.
Дворянин
2. Император и трубочист
Фантастика:
боевая фантастика
альтернативная история
рейтинг книги
Газлайтер. Том 25
25. История Телепата
Фантастика:
боевая фантастика
попаданцы
аниме
рейтинг книги
Неверный
Любовные романы:
современные любовные романы
рейтинг книги
Черный Маг Императора 11
11. Черный маг императора
Фантастика:
юмористическое фэнтези
попаданцы
аниме
фэнтези
рейтинг книги
Черный Маг Императора 6
6. Черный маг императора
Фантастика:
юмористическое фэнтези
попаданцы
аниме
рейтинг книги
Адвокат Империи 11
Адвокат империи
Фантастика:
городское фэнтези
альтернативная история
рпг
дорама
попаданцы
рейтинг книги
Излом
10. Последняя жизнь
Фантастика:
фэнтези
попаданцы
аниме
рейтинг книги
Туполев
1327. Жизнь замечательных людей
Документальная литература:
биографии и мемуары
рейтинг книги
Корсар
Вселенная EVE Online
Фантастика:
боевая фантастика
космическая фантастика
рейтинг книги
Адвокат Империи 2
2. Адвокат империи
Фантастика:
городское фэнтези
попаданцы
аниме
фэнтези
фантастика: прочее
рейтинг книги
Я Гордый Часть 3
3. Стальные яйца
Фантастика:
фэнтези
попаданцы
аниме
рейтинг книги
Север помнит
Любовные романы:
любовно-фантастические романы
рейтинг книги