Глава 2, «Аргументы, опции и переменные окружения»,
описывает, как С программа получает доступ к аргументам и опциям командной строки и обрабатывает их, а также объясняет, как работать с переменными окружения.
Глава 3, «Управление памятью на уровне пользователя»,
предоставляет обзор различных видов используемой памяти, доступной работающему процессу. Управление памятью на уровне пользователя является основным для каждого нетривиального приложения, поэтому важно понять это с самого начала.
Глава 4, «Файлы и файловый ввод/вывод»,
обсуждает базовый файловый ввод/вывод, показывая, как создавать и использовать файлы. Понимание этого важно для всего последующего материала.
Глава 5, «Каталоги и служебные данные файлов»,
описывает, как работают каталоги, прямые и символические ссылки. Затем описываются служебные данные файлов, такие, как владелец, права доступа и т.д., а также освещается работа с каталогами
Глава 6, «Общие библиотечные интерфейсы — часть 1»,
рассматривает первый набор интерфейсов общего программирования, которые будут нам нужны для эффективного использования служебных данных файлов.
Глава 7, «Соединяя все вместе:
<i>ls</i>
»,связывает воедино все рассмотренное до сих пор, рассматривая программу V7
ls
.
Глава 8, «Файловые системы и обходы каталогов»,
описывает, как монтируются и демонтируются файловые системы и как программа может получить сведения о том, что смонтировано в системе. В главе описывается также, как программа может легко «обойти» всю иерархию файлов, предпринимая а отношении каждого встреченного объекта необходимые действия.
Вторая часть книги имеет дело с созданием и управлением процессами, межпроцессным взаимодействием посредством каналов и сигнала, ID пользователей и групп и дополнительными интерфейсами общего программирования. Далее в книге сначала описываются интернационализация с использованием GNU
gettext
, а затем несколько расширенных API.
Глава 9, «Управление процессами и каналы»,
рассматривает создание процесса, исполнение программы, межпроцессное взаимодействие (IPC) с использованием каналов и управление дескрипторами файлов, включая неблокирующий ввод/вывод.
Глава 10, «Сигналы»,
обсуждает сигналы, упрощенную форму межпроцессного взаимодействия. Сигналы играют также важную роль а управлении родительским процессом порожденных процессов.
Глава 11, «Права доступа и ID пользователей и групп»,
рассматривает, как идентифицируются процессы и файлы, как работает проверка прав доступа и как работают механизмы
setuid
и
setgid
.
Глава 12, «Общие библиотечные интерфейсы — часть 2»,
рассматривает оставшуюся часть общих API; многие из них более специализированы, чем первый общий набор API.
Глава 13, «Интернационализация и локализация»,
объясняет, как почти без усилий обеспечить работу ваших программ на нескольких языках.
Глава 14, «Расширенные интерфейсы»,
описывает несколько расширенных версий интерфейсов, освещенных в предыдущих главах, а также более подробно освещает блокировку файлов.
Мы завершаем книгу главой об отладке, поскольку (почти) никто не может сделать все правильно с первого раза, и рекомендуем финальный проект для закрепления ваших знаний по рассмотренным в данной книге API.
Глава 15, «Отладка»,
описывает основы отладчика GDB, передает как можно больше нашего опыта в этой области и рассматривает несколько полезных инструментов для осуществления различных видов отладки.
Глава 16, «Проект, связывающий все воедино»,
представляет значительный проект по программированию, который использует почти все, рассмотренное в книге.
Несколько приложений освещают представляющие интерес темы, включая лицензии для использованного в данной книге исходного коде.
Приложение А, «Научитесь программированию за десять лет»,
ссылается на знаменитое высказывание: «Москва не сразу строилась»[7]. Также и квалификация в Linux/Unix и понимание этих систем приходит лишь со временем и практикой. С этой целью мы включили это эссе Петера Норвига, которое мы горячо рекомендуем.
Приложение В, «Лицензия Caldera для старой Unix»,
охватывает исходный код Unix, использованный в данной книге.
Приложение С, «Общедоступная лицензия GNU»,
охватывает исходный код GNU, использованный в данной книге.
Соглашения об обозначениях
Как и в любой книге на компьютерную тему, для передачи информации мы используем определенные соглашения об обозначениях. Определения или первое использование термина выделяется курсивом, как слово «Определения» в начале этого предложения. Курсив используется также для выделения, для цитирования других работ и комментариев в примерах. Переменные элементы, такие, как аргументы или имена файлов, выглядят таким образом. Иногда мы используем жирный шрифт, когда нужно усилить мысль.
Вещи, находящиеся на компьютере, обозначаются моноширинными шрифтом, как в случае имен файлов (
foo.c
) и названий команд (
ls
,
grep
). Короткие фрагменты, которые вы вводите, дополнительно заключаются в одинарные кавычки: '
ls -l *.с
'
$
и
>
являются первичным и вторичным приглашениями оболочки Борна и используются при отображении интерактивных примеров. Ввод пользователя выделяется другим шрифтом от обычного вывода компьютера в примерах. Примеры выглядят следующим образом:
$ <b>ls -1</b> /* Просмотр файлов. Опция - цифра 1, а не буква l */
foo
bar
baz
Мы предпочитаем оболочку Борна и ее варианты (ksh93, Bash) по сравнению с оболочкой С; соответственно на всех наших примерах показана лишь оболочка Борна. Знайте, что правила применения кавычек и переноса на следующую строку в оболочке С другие; если вы используете ее, то на свой страх и риск![8]
При ссылках на функции в программах мы добавляем к имени функции пустую пару скобок:
printf()
,
strcpy()
. При ссылке на справочную страницу (доступную по команде man), мы следуем стандартному соглашению Unix по написанию имени команды или функции курсивом, а раздела — в скобках после имени обычным шрифтом:
awk(1),
printf(3)
[9].
Где получить исходные коды Unix и GNU
Вы можете захотеть получить копни программ, которые мы использовали в данной книге, для своих собственных экспериментов и просмотра. Весь исходный код доступен через Интернет, а ваш дистрибутив GNU/Linux содержит исходный код для инструментов GNU.
Код Unix
Архивы различных «древних» версий Unix поддерживаются Обществом наследства UNIX (The UNIX Heritage Society — TUHS),
http://www.tuhs.org
.
Наибольший интерес представляет возможность просматривать архив старых исходных кодов Unix через веб. Начните с
http://minnie.tuhs.org/UnixTree/
. Все примеры кода в данной книге из седьмого издания исследовательской системы UNIX, известной также как «V7».