• Вся книга была обновлена с учетом новой спецификации Unix версии 6 — обновленной версии стандарта POSIX.
• Небольшие фрагменты исходного кода примеров приводятся с номерами строк, облегчая ориентирование в соответствии с полным исходным кодом.
• Глава 1 содержит обновленную и расширенную историю разработки Linux.
• В главе 4 рассматриваются утилиты strace и ltrace.
• В главе 6 рассматривается библиотека GNU С (glibc) и стандарты, на которых она основана. Также в этой главе объясняется, как и почему следует использовать макросы проверки свойств. Кроме того, описываются основные системные вызовы, рассматриваемые во всех разделах книги; способы обнаружения возможностей системы во время выполнения; разнообразные интерфейсы, предоставляемые glibc; подход glibc к обратной совместимости.
• Глава 7 содержит значительно расширенную информацию об инструментах отладки памяти, включая новые свойства отладки памяти библиотеки GNU С, новую версию mpr и новый инструмент Valgrind.
• В главе 12 рассматриваются сигналы реального времени и контексты сигналов.
• В главе 13 документируются системные вызовы poll() и epoll, предоставляющие рекомендуемые альтернативы select().
• В главе 16 рассматривается и рекомендуется новый механизм распределения псевдотерминалов (Pseudo TTY). Также внимание уделяется системным базам данных utmp и wtmp.
• В главе 17 рассматривается как IPv6, так и IPv4, включая новые интерфейсы системных библиотек для написания программ, которые могут равнозначно использовать IPv6 и IPv4. Также рассматриваются более ранние интерфейсы, которым уделялось внимание в первом издании, чтобы дать возможность поддерживать код, использующий эти интерфейсы, и переносить его в более новые интерфейсы. Кроме того, обсуждается более широкий набор функций, чем нужен для многих сетевых серверов, например, неблокирующая accept().
• Глава 22 — это новая глава, в которой рассматриваются основные требования к написанию защищенных программ и объясняется, почему вопросы безопасности относятся ко всем программам, а не только к системным демонам и утилитам.
• Глава 23 содержит более полное обсуждение использования регулярных выражений, включая простую версию утилиты grep в качестве примера.
• В главе 26 рассматриваются новейшие улучшения библиотеки popt и усовершенствованный код примера.
• К главе 28 добавлена реализация Linux-PAM.
• В главе 25 документируется библиотека qdbm, а не Berkeley db, поскольку лицензия qdbm является менее ограничивающей.
• Почти каждая глава содержит важные обновления.
Описанные ниже материалы из книги были изъяты.
• Поиск информации о Linux в списках рассылки, группах новостей и на Web-сайтах; эта информация меняется слишком быстро, чтобы стать частью книги, которая будет полезна в течение многих лет.
• Информация об управлении портами ввода-вывода; это обычно использовать не рекомендуется, поскольку оно конфликтует со структурой управления устройствами и режимом электропитания Linux.
• Точные копии общедоступной лицензии GNU и библиотеки GNU. Несмотря на свою важность, перепечатка этих лицензий не улучшает знание их содержания. Также со времени публикации первого издания увеличилась важность ряда других лицензий.
• Инструмент отладки памяти Checker больше не поддерживается, поэтому во втором издании не рассматривается.
Благодарности
Мы благодарим наших технических рецензентов за потраченное время и тщательность. Их предложения помогли улучшить эту книгу. Особую благодарность выражаем Линусу Торвальдсу (Linus Torvalds), Алану Коксу (Alan Сох), Теду Тсо (Ted Ts'o) и Арьену ван де Вену (Arjan van de Ven), которые нашли время, чтобы ответить на наши вопросы.
Поддержав нас в написании первого издания, наши жены — Ким Джонсон (Kim Johnson) и Бригид Троан (Brigid Troan) были так терпеливы и великодушны, что побудили нас написать второе издание. Без их помощи и поддержки не удалось бы написать эту книгу, не говоря уже о ее переиздании.
От издательства
Вы, читатель этой книги, и есть главный ее критик. Мы ценим ваше мнение и хотим знать, что было сделано нами правильно, что можно было сделать лучше и что еще вы хотели бы увидеть изданным нами. Нам интересны любые ваши замечания в наш адрес.
Мы ждем ваших комментариев и надеемся на них. Вы можете прислать нам бумажное или электронное письмо либо просто посетить наш Web-сервер и оставить свои замечания там. Одним словом, любым удобным для вас способом дайте нам знать, нравится ли вам эта книга, а также выскажите свое мнение о том, как сделать наши книги более интересными для вас.
Отправляя письмо или сообщение, не забудьте указать название книги и ее авторов, а также свой обратный адрес. Мы внимательно ознакомимся с вашим мнением и обязательно учтем его при отборе и подготовке к изданию новых книг.
Наши электронные адреса:
E-mail: [email protected]
WWW: http://www.williamspublishing.com
Наши почтовые адреса:
в России: 115419, Москва, а/я 783
в Украине: 03150, Киев, а/я 152
Часть I
Начало работы
Глава 1
История создания Linux
Термин Linux используется для обозначения разных понятий. Технически точным определением является следующее.
Linux — это свободно распространяемое ядро Unix-подобной операционной системы.
Однако многие подразумевают под термином Linux всю операционную систему, основанную на ядре Linux.
Linux — это свободно распространяемая Unix-подобная операционная система, включающая ядро, системные инструменты, приложения и завершенную среду разработки.
В этой книге используется второе определение, поскольку вы будете программировать не только для ядра, а для всей операционной системы.
Linux (в соответствие со вторым определением) предоставляет хорошую платформу для переноса программ, поскольку рекомендованные им интерфейсы (которые подробно рассматриваются в книге) поддерживаются почти каждой доступной версией Unix, равно как и большинством клонов Unix. Как следует ознакомившись с материалом настоящей книги, вы сможете переносить свои программы почти во все системы Unix и системы, подобные Unix, проделывая лишь небольшую дополнительную работу.
С другой стороны, после работы с Linux вы можете предпочесть пользоваться только ею, не утруждая себя переносом.
Linux — это не просто еще одна система, подобная Unix. Это не просто хорошая платформа, куда можно переносить программы — это также хорошая платформа, на которой можно создавать и запускать приложения. Она широко используется во всем мире, помогая популяризировать концепцию открытого исходного кода (Open Source) или свободного программного обеспечения (Free Software). Краткий экскурс в историю поможет понять, как и почему это случилось.
1.1. Краткая история свободного программного обеспечения Unix
Предлагаемая история упрощена и основана на самых важных элементах системы Linux. Более длинную и равномерную историю можно прочесть в книге A Quarter Century of UNIX [29].
Во времена появления вычислительной техники программное обеспечение (ПО) рассматривалось лишь как свойство оборудования. При продаже внимание уделялось именно аппаратуре, поэтому компании отдавали ПО вместе со своими системами. Улучшения, новые алгоритмы и идеи свободно распространялись среди студентов, профессоров и корпоративных исследователей.
Вскоре компании обратили внимание на ценность ПО как интеллектуальной собственности. Они начали придавать законную силу авторским правам на свои технологии ПО и ограничивать распространение исходных и двоичных кодов. Инновации, ранее рассматривавшиеся как общественная собственность, стали яростно защищаемым корпоративным имуществом, что изменило культуру разработки компьютерного ПО.
Ричард Столлман (Richard Stallman) из Массачусетсского технологического института (MIT) не хотел, чтобы инновации ПО во всем мире контролировались корпоративными амбициями, поэтому он основал Фонд свободного программного обеспечения (Free Software Foundation — FSF). Целью FSF стало поощрение разработки и использования ПО без ограничений на свободное распространение.
Однако слово "free" в этом контексте вызвало недоразумения. Под словом "free" Ричард Столлман подразумевал свободу, а не нулевую цену. Он твердо убежден, что ПО и связанная с ним документация должны быть доступны с исходным кодом, без ограничений на дополнительное распространение. Не так давно появился термин Open Source (открытый исходный код) для описания тех же целей (без слова "free", вызывающего недоразумения). Термины Open Source и Free Software (свободное ПО) обычно рассматриваются как синонимы.