предоставляет обзор различных видов используемой памяти, доступной работающему процессу. Управление памятью на уровне пользователя является основным для каждого нетривиального приложения, поэтому важно понять это с самого начала.
Глава 4, «Файлы и файловый ввод/вывод»,
обсуждает базовый файловый ввод/вывод, показывая, как создавать и использовать файлы. Понимание этого важно для всего последующего материала.
Глава 5, «Каталоги и служебные данные файлов»,
описывает, как работают каталоги, прямые и символические ссылки. Затем описываются служебные данные файлов, такие, как владелец, права доступа и т.д., а также освещается работа с каталогами
Глава 6, «Общие библиотечные интерфейсы — часть 1»,
рассматривает первый набор интерфейсов общего программирования, которые будут нам нужны для эффективного использования служебных данных файлов.
Глава 7, «Соединяя все вместе: ls
»,
связывает воедино все рассмотренное до сих пор, рассматривая программу 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 *.с
'
$
и >
являются первичным и вторичным приглашениями оболочки Борна и используются при отображении интерактивных примеров. Ввод пользователя выделяется другим шрифтом от обычного вывода компьютера в примерах. Примеры выглядят следующим образом:
$ ls -1 /* Просмотр файлов. Опция - цифра 1, а не буква l */
foo
bar
baz
Мы предпочитаем оболочку Борна и ее варианты (ksh93, Bash) по сравнению с оболочкой С; соответственно на всех наших примерах показана лишь оболочка Борна. Знайте, что правила применения кавычек и переноса на следующую строку в оболочке С другие; если вы используете ее, то на свой страх и риск![8]
При ссылках на функции в программах мы добавляем к имени функции пустую пару скобок: printf()
, strcpy()
. При ссылке на справочную страницу (доступную по команде man), мы следуем стандартному соглашению Unix по написанию имени команды или функции курсивом, а раздела — в скобках после имени обычным шрифтом: awk(1), printf(3)[9].
Вы можете захотеть получить копни программ, которые мы использовали в данной книге, для своих собственных экспериментов и просмотра. Весь исходный код доступен через Интернет, а ваш дистрибутив GNU/Linux содержит исходный код для инструментов GNU.
Архивы различных «древних» версий Unix поддерживаются Обществом наследства UNIX (The UNIX Heritage Society — TUHS), http://www.tuhs.org
.
Наибольший интерес представляет возможность просматривать архив старых исходных кодов Unix через веб. Начните с http://minnie.tuhs.org/UnixTree/
. Все примеры кода в данной книге из седьмого издания исследовательской системы UNIX, известной также как «V7».
Сайт TUHS физически расположен в Австралии, хотя имеются зеркала архива по всему миру — см. http://www.tuhs.org/archive_sites.html
. Эта страница также указывает, что архив доступен для зеркала через rsync
. (Если у вас нет rsync
, см. http://rsync.samba.org/
: это стандартная утилита на системах GNU/Linux.)
Чтобы скопировать весь архив, потребуется примерно 2-3 гигабайта дискового пространства. Для копирования архива создайте пустой каталог, а в нем выполните следующие команды:
mkdir Applications 4BSD PDP-11 PDP-11/Trees VAX Other
8
См. справочные страницы
9
Соответствующие справочные страницы можно посмотреть с помощью man 1 awk и man 3 printf —