ИНФОРМАЦИОННЫЕ ТЕХНОЛОГИИ
БИЗНЕС, УПРАВЛЕНИЕ ПРОЕКТАМИ
АНГЛИЙСКИЙ ЯЗЫК
ЭЛЕКТРОННЫЕ КНИГИ

UNIX. Профессиональное программирование, 3-е издание

 

UNIX. Профессиональное программирование, 3-е издание

UNIX. Профессиональное программирование, 3-е издание

Авторы: Раго С., Стивенс У.
Страниц: 1104
Масса: 1400
Обложка: мягкая
Издана: декабрь, 2013
Купить


Аннотация

«UNIX. Профессиональное программирование» – это подробнейшее справочное руководство, которое на протяжении 20 лет помогает профессиональным программистам на языке С писать исключительно эффективный и надежный код. Стив Раго, коллега Рича Стивенса, вновь полностью обновил классический труд, сохранив точность и стиль оригинала. Новое, третье, издание охватывает современные ведущие платформы, отражает новейшие технические достижения и передовую практику и соответствует 4-й версии Single UNIX Specification.

Помимо основ (файлы, каталоги и процессы) рассматриваются более сложные темы, такие как обработка сигналов и терминальный ввод/вывод, многопоточная модель выполнения и межпроцессное взаимодействие с применением сокетов. Третье издание охватывает более 70 новых интерфейсов, включая функции POSIX асинхронного ввода/вывода, циклические блокировки, барьеры и семафоры POSIX.

Примеры протестированы на 4-х наиболее популярных платформах: Solaris 10, Mac OS X 10.6.8 (Darwin 10.8.0), FreeBSD 8.0 и Ubuntu 12.04 (основана на ядре Linux 3.2). Описания более 400 системных вызовов и функций сопровождаются короткими примерами законченных программ, которые наглядно демонстрируют порядок их применения, входные аргументы и возвращаемые значения. С целью закрепить полученные знания представлено несколько конкретных примеров, занимающих целые главы и отражающих уровень развития современных версий UNIX.

 

Оглавление

 

Отзывы ко второму изданию

Отзывы к первому изданию

Вступительное слово ко второму изданию

Предисловие

Предисловие ко второму изданию

Предисловие к первому изданию

Глава 1. Обзор ОС UNIX

1.1. Введение

1.2. Архитектура UNIX

1.3. Вход в систему

1.4. Файлы и каталоги

1.5. Ввод и вывод

1.6. Программы и процессы

1.7. Обработка ошибок

1.8. Идентификация пользователя

1.9. Сигналы

1.10. Представление времени

1.11. Системные вызовы и библиотечные функции

1.12. Подведение итогов

Глава 2. Стандарты и реализации UNIX

2.1. Введение

2.2. Стандартизация UNIX

2.2.1. ISO C

2.2.2. IEEE POSIX

2.2.3. Single UNIX Specification

2.2.4. FIPS

2.3. Реализации UNIX

2.3.1. UNIX System V Release 4

2.3.2. 4.4BSD

2.3.3. FreeBSD

2.3.4. Linux

2.3.5. Mac OS X

2.3.6. Solaris

2.3.7. Прочие версии UNIX

2.4. Связь между стандартами и реализациями

2.5. Ограничения

2.5.1. Пределы ISO C

2.5.2. Пределы POSIX

2.5.3. Пределы XSI

2.5.4. Функции sysconf, pathconf и fpathconf

2.5.5. Неопределенные пределы времени выполнения

2.6. Необязательные параметры

2.7. Макроопределения контроля функциональных особенностей

2.8. Элементарные системные типы данных

2.9. Различия между стандартами

2.10. Подведение итогов

Глава 3. Файловый ввод/вывод

3.1. Введение

3.2. Дескрипторы файлов

3.3. Функции open и openat

3.4. Функция creat

3.5. Функция close

3.6. Функция lseek

3.7. Функция read

3.8. Функция write

3.9. Эффективность операций ввода/вывода

3.10. Совместное использование файлов

3.11. Атомарные операции

3.12. Функции dup и dup2

3.13. Функции sync, fsync и fdatasync

3.14. Функция fcntl

3.15. Функция ioctl

3.16. /dev/fd

3.17. Подведение итогов

Глава 4. Файлы и каталоги

4.1. Введение

4.2. Функции stat, fstat и lstat

4.3. Типы файлов

4.4. set-user-ID и set-group-ID

4.5. Права доступа к файлу

4.6. Принадлежность новых файлов и каталогов

4.7. Функции access и faccessat

4.8. Функция umask

4.9. Функции chmod, fchmod и fchmodat

4.10. Бит sticky

4.11. Функции chown, fchown, fchownat и lchown

4.12. Размер файла

4.13. Усечение файлов

4.14. Файловые системы

4.15. Функции link, linkat, unlink, unlinkat и remove

4.16. Функции rename и renameat 167

4.17. Символические ссылки

4.18. Создание и чтение символических ссылок

4.19. Временные характеристики файлов

4.20. Функции futimens, utimensat и utimes

4.21. Функции mkdir, mkdirat и rmdir

4.22. Чтение каталогов

4.23. Функции chdir, fchdir и getcwd

4.24. Специальные файлы устройств

4.25. Коротко о битах прав доступа к файлам

4.26. Подведение итогов

Глава 5. Стандартная библиотека ввода/вывода

5.1. Введение

5.2. Потоки и объекты FILE

5.3. Стандартные потоки ввода, вывода и сообщений об ошибках

5.4. Буферизация

5.5. Открытие потока

5.6. Чтение из потока и запись в поток

5.7. Построчный ввод/вывод

5.8. Эффективность стандартных функций ввода/вывода

5.9. Ввод/вывод двоичных данных

5.10. Позиционирование в потоке

5.11. Форматированный ввод/вывод

5.12. Подробности реализации

5.13. Временные файлы

5.14. Потоки ввода/вывода в памяти

5.15. Альтернативы стандартной библиотеке ввода/вывода

5.16. Подведение итогов

Глава 6. Информация о системе и файлы данных

6.1. Введение

6.2. Файл паролей

6.3. Теневые пароли

6.4. Файл групп

6.5. Идентификаторы дополнительных групп

6.6. Различия реализаций

6.7. Прочие файлы данных

6.8. Учет входов в систему

6.9. Информация о системе

6.10. Функции даты и времени

6.11. Подведение итогов

Глава 7. Среда окружения процесса

7.1. Введение

7.2. Функция main

7.3. Завершение работы процесса

7.4. Аргументы командной строки

7.5. Список переменных окружения

7.6. Раскладка памяти программы на языке C

7.7. Разделяемые библиотеки

7.8. Распределение памяти

7.9. Переменные окружения

7.10. Функции setjmp и longjmp

7.11. Функции getrlimit и setrlimit

7.12. Подведение итогов

Глава 8. Управление процессами

8.1. Введение

8.2. Идентификаторы процесса

8.3. Функция fork

8.4. Функция vfork

8.5. Функции exit

8.6. Функции wait и waitpid

8.7. Функция waitid

8.8. Функции wait3 и wait4

8.9. Гонка за ресурсами

8.10. Функции exec

8.11. Изменение идентификаторов пользователя и группы

8.12. Интерпретируемые файлы

8.13. Функция system

8.14. Учет использования ресурсов процессами

8.15. Идентификация пользователя

8.16. Планирование процессов

8.17. Временные характеристики процесса

8.18. Подведение итогов

Глава 9. Взаимоотношения между процессами

9.1. Введение

9.2. Вход с терминала

9.3. Вход в систему через сетевое соединение

9.4. Группы процессов

9.5. Сеансы

9.6. Управляющий терминал

9.7. Функции tcgetpgrp, tcsetpgrp и tcgetsid

9.8. Управление заданиями

9.9. Выполнение программ командной оболочкой

9.10. Осиротевшие группы процессов

9.11. Реализация в FreeBSD

9.12. Подведение итогов

Глава 10. Сигналы

10.1. Введение

10.2. Концепция сигналов

10.3. Функция signal

10.4. Ненадежные сигналы

10.5. Прерванные системные вызовы

10.6. Реентерабельные функции

10.7. Семантика сигнала SIGCLD

10.8. Надежные сигналы. Терминология и семантика

10.9. Функции kill и raise

10.10. Функции alarm и pause

10.11. Наборы сигналов

10.12. Функция sigprocmask

10.13. Функция sigpending

10.14. Функция sigaction

10.15. Функции sigsetjmp и siglongjmp

10.16. Функция sigsuspend

10.17. Функция abort

10.18. Функция system

10.19. Функции sleep, nanosleep и clock_nanosleep

10.20. Функция sigqueue

10.21. Сигналы управления заданиями

10.22. Имена и номера сигналов

10.23. Подведение итогов

Глава 11. Потоки

11.1. Введение

11.2. Концепция потоков

11.3. Идентификация потоков

11.4. Создание потока

11.5. Завершение потока

11.6. Синхронизация потоков

11.6.1. Мьютексы

11.6.2. Предотвращение тупиковых ситуаций

11.6.3. Функция pthread_mutex_timedlock

11.6.4. Блокировки чтения-записи

11.6.5. Блокировки чтения-записи с тайм-аутом

11.6.6. Переменные состояния

11.6.7. Циклические блокировки

11.6.8. Барьеры

11.7. Подведение итогов

Глава 12. Управление потоками

12.1. Введение

12.2. Пределы для потоков

12.3. Атрибуты потока

12.4. Атрибуты синхронизации

12.4.1. Атрибуты мьютексов

12.4.2. Атрибуты блокировок чтения-записи

12.4.3. Атрибуты переменных состояния

12.4.4. Атрибуты барьеров

12.5. Реентерабельность

12.6. Локальные данные потоков

12.7. Принудительное завершение потоков

12.8. Потоки и сигналы

12.9. Потоки и fork

12.10. Потоки и операции ввода/вывода

12.11. Подведение итогов

Глава 13. Процессы­демоны

13.1. Введение

13.2. Характеристики демонов

13.3. Правила программирования демонов

13.4. Журналирование ошибок

>13.5. Демоны в единственном экземпляре

13.6. Соглашения для демонов

13.7. Модель клиент-сервер

13.8. Подведение итогов

Глава 14. Расширенные операции ввода/вывода

14.1. Введение

14.2. Неблокирующий ввод/вывод

14.3. Блокировка записей

14.4. Мультиплексирование ввода/вывода

14.4.1. Функции select и pselect

14.4.2. Функция poll

14.5. Асинхронный ввод/вывод

14.5.1. Асинхронный вывод в System V

14.5.2. Асинхронный ввод/вывод в BSD

14.5.3. Асинхронный ввод/вывод в POSIX

14.6. Функции readv и writev

14.7. Функции readn и writen

14.8. Операции ввода/вывода с отображаемой памятью

14.9. Подведение итогов

Глава 15. Межпроцессное взаимодействие

15.1. Введение

15.2. Неименованные каналы

15.3. Функции popen и pclose

15.4. Сопроцессы

15.5. FIFO

15.6. XSI IPC

15.6.1. Идентификаторы и ключи

15.6.2. Структура прав доступа

15.6.3. Конфигурируемые пределы

15.6.4. Преимущества и недостатки

5.7. Очереди сообщений

15.8. Семафоры

15.9. Разделяемая память

15.10. Семафоры POSIX

15.11. Свойства взаимодействий типа клиент-сервер

15.12. Подведение итогов

Глава 16. Межпроцессное взаимодействие в сети: сокеты

16.1. Введение

16.2. Дескрипторы сокетов

16.3. Адресация

16.3.1. Порядок байтов

16.3.2. Форматы адресов

16.3.3. Определение адреса

16.3.4. Присваивание адресов сокетам

16.4. Установление соединения

16.5. Передача данных

16.6. Параметры сокетов

16.7. Экстренные данные

16.8. Неблокирующий и асинхронный ввод/вывод

16.9. Подведение итогов

Глава 17. Расширенные возможности IPC

17.1. Введение

17.2. Сокеты домена UNIX

17.2.1. Именованные сокеты домена UNIX

17.3. Уникальные соединения

17.4. Передача дескрипторов файлов

17.5. Сервер открытия файлов, версия 1

17.6. Сервер открытия файлов, версия 2

17.7. Подведение итогов

Глава 18. Терминальный ввод/вывод

18.1. Введение

18.2. Обзор

18.3. Специальные символы ввода

18.4. Получение и изменение характеристик терминала

18.5. Флаги режимов терминала

18.6. Команда stty

18.7. Функции для работы со скоростью передачи

18.8. Функции управления линией связи

18.9. Идентификация терминала

18.10. Канонический режим

18.11. Неканонический режим

18.12. Размер окна терминала

18.13. termcap, terminfo и curses

18.14. Подведение итогов

Глава 19. Псевдотерминалы

19.1. Введение

19.2. Обзор

19.3. Открытие устройств псевдотерминалов

19.4. Функция pty_fork

19.5. Программа pty

19.6. Использование программы pty

19.7. Дополнительные возможности

19.8. Подведение итогов

Глава 20. Библиотека базы данных

20.1. Введение

20.2. Предыстория

20.3. Библиотека

20.4. Обзор реализации

20.5. Централизация или децентрализация?

20.6. Одновременный доступ

20.7. Сборка библиотеки

20.8. Исходный код

20.9. Производительность

20.10. Подведение итогов

Глава 21. Взаимодействие с сетевым принтером

21.1. Введение

21.2. Протокол печати через Интернет

21.3. Протокол передачи гипертекста

21.4. Очередь печати

21.5. Исходный код

21.6. Подведение итогов

Приложение A. Прототипы функций

Приложение B. Различные исходные тексты

Приложение C. Варианты решения некоторых упражнений

Список литературы

Алфавитный указатель

 

 

Предисловие к русскому изданию

Введение

Прошло почти восемь лет, как я приступил к обновлению первого издания, и за эти годы многое изменилось.

·          К моменту публикации второго издания организация The Open Group выпустила спецификацию Single UNIX Specification в редакции 2004 года, включив в нее два блока изменений. В 2008 The Open Group выпустила новую версию спецификации Single UNIX Specification, дополнив основные определения, добавив новые и удалив устаревшие интерфейсы. В нее была включена версия 7 спецификации Base Specification, и в 2009 она была опубликована как версия POSIX.1 2008 года. В 2010 была опубликована 4 версия спецификации Single UNIX Specification, куда вошло обновленное определение интерфейса библиотеки curses.

·  Организация The Open Group сертифицировала как UNIX-системы версии 10.5, 10.6 и 10.8 операционной системы Mac OS X, выполняющиеся на аппаратной архитектуре Intel.

·  Компания Apple Computer прекратила разработку Mac OS X для платформы PowerPC. Начиная с версии 10.6 (Snow Leopard, снежный барс) новые версии операционной системы выпускались только для платформы x86.

·  Были открыты исходные коды операционной системы Solaris, чтобы повысить ее конкурентоспособность с популярной открытой моделью разработки, которой следуют FreeBSD, Linux и Mac OS X. Когда в 2010 Oracle Corporation купила Sun Microsystems, она прекратила разработку OpenSolaris. Вследствие этого сообществом Solaris был образован проект Illumos с открытыми исходными кодами на основе OpenSolaris, в рамках которого было продолжено развитие системы. За дополнительной информацией обращайтесь по адресу http://www.illumos.org.

·  В 2011 был обновлен стандарт языка C, но, так как системы еще не переориентировались на него, мы продолжим ссылаться на стандарт 1999 года.

Особо следует отметить, что платформы, использовавшиеся в качестве примеров во втором издании, значительно устарели. В этом, третьем издании, я буду опираться на следующие платформы:

1.        FreeBSD 8.0, наследница 4.4BSD, от Computer Systems Research Group из Калифорнийского университета в Беркли, работающая на 32-разрядном процессоре Intel Pentium.

2.        Linux 3.2.0 (дистрибутив Ubuntu 12.04), свободно распространяемая UNIX-подобная операционная система, работающая на 64-разрядном процессоре Intel Core i5.

3.        Apple Mac OS X, версия 10.6.8 (Darwin 10.8.0), работающая на 64-разрядном процессоре Intel Core 2 Duo. (Ядро Darwin основано на ядрах FreeBSD и Mach.) Я выбрал версию для платформы Intel, потому что последние версии Mac OS X больше не поддерживают платформу PowerPC. Недостаток этого выбора в том, что появился перекос в сторону Intel. А при обсуждении проблем разнородности весьма полезно иметь процессоры с различными характеристиками, такими как порядок следования байтов и размер целого числа.

4.        Solaris 10 (производная от System V Release 4) от Sun Microsystems (ныне Oracle), работающая на 64- разрядном процессоре UltraSPARC IIi.

Изменения в третьем издании

Одним из значительных изменений в версии POSIX.1-2008 спецификации Single UNIX Specification является присваивание интерфейсам, имеющим отношение к STREAMS, статуса устаревших. Это – первый шаг на пути удаления интерфейсов из будущих версий стандарта. По этой причине я скрепя сердце удалил из этого издания книги все, что относилось к STREAMS. Я не считаю это изменение удачным, потому что интерфейсы STREAMS выглядят более привлекательными на фоне сокетов и во многих отношениях являются более гибкими. Должен признать, что я не могу быть полностью беспристрастным, когда дело доходит до механизма STREAMS, но у меня нет причин оспаривать понижение его значимости в современных системах:

·  Linux не включает поддержку STREAMS в базовую систему, хотя существуют пакеты (LiS и OpenSS7), добавляющие эту функциональность;

·  хотя Solaris 10 включает поддержку STREAMS, Solaris 11 использует реализацию сокетов, уже не опирающуюся на интерфейсы STREAMS;

·  Mac OS X не включает поддержку STREAMS;

·  FreeBSD не включает поддержку STREAMS (и никогда не включала).

После удаления материала, связанного с механизмом STREAMS, появилась возможность добавить обсуждение новых тем, таких как POSIX-совместимый асинхронный ввод/вывод.

Второе издание книги охватывало ядро Linux версии 2.4. В этом издании я использую версию 3.2. Самое большое отличие между этими версиями заключается в подсистеме управления потоками выполнения. В версии Linux 2.6 поддержка потоков выполнения была реализована на основе Native POSIX Thread Library (NPTL), которая делает потоки выполнения в Linux более похожими на потоки выполнения в других системах.

Если говорить в общем, в это издание было включено более 70 новых интерфейсов, в том числе и интерфейсов асинхронного ввода/вывода, взаимоблокировки (spin locks), барьеры (barriers) и семафоры POSIX. Описание наиболее устаревших интерфейсов было удалено, кроме некоторых, распространенных повсеместно.

 

Об авторах

Покойный Ричард Стивенс (W. Richard Stevens) является автором нескольких книг: «UNIX® Network Programming» (в двух томах) – признанный классический труд, посвященный разработке сетевых приложений в среде UNIX, книги «TCP/IP Illustrated» (в трех томах) и первого издания этой книги.

Стивен Раго (Stephen A. Rago) – автор книги «UNIX® System V Network Programming» (Addison-Wesley, 1993). Раго был одним из разработчиков Bell Laboratories, занимавшихся созданием UNIX System V, Release 4. Он выступал в роли технического рецензента первого издания книги «Advanced Programming in the UNIX® Environment». В настоящее время Стивен Раго занимается исследованиями в области систем хранения данных в подразделении Storage Systems Group в NEC Laboratories America.

Отзывы читателей

Незаменимая классика! 23 августа 2013

В 1992 году Ричард Стивенс (W. Richard Stevens) написал книгу «Advanced Programming in the UNIX Environment» (APUE), которая была опубликована издательством Addison-Wesley в 1993. В 2005 году Стивен Раго (Stephen A. Rago) подготовил второе издание, точнее отражающее положение дел в UNIX и UNIX-подобных системах. В 2013 году Раго подготовил обновленное 3 издание – предмет этого отзыва.

Книга APUE ориентирована на читателей с опытом программирования на языке C в ОС UNIX. Она включает главы с длинными примерами действующих приложений и способна одновременно играть роль учебника и ценного справочника.

Немногие авторы пользовались таким авторитетом в сообществе специалистов, как Рич Стивенс, поэтому любой отзыв о его книгах должен включать несколько слов о нем самом. Работы Стивенса обычно возглавляют список «рекомендованной литературы», когда речь идет о сетевых взаимодействиях по протоколу TCP/IP или о программировании для UNIX. Стивенс ушел из жизни 1 сентября 1999 года. Кроме APUE он написал также книги «UNIX Network Programming» (том 1: «API» и том 2: «IPC») и «TCP/IP Illustrated» (том1: «Protocols», том 2: «Implementation» и том 3: «TCP/T, HTTP, NNTP, Unix Domain Protocols».) Стивенс был посмертно награжден престижной премией «Lifetime Achievement Award» общества USENIX за его необычайный талант преподавания и широту души.

Стивен Раго, взявший на себя грандиозный труд переиздания книги APUE Стивенса, работал в Bell Laboratories как разработчик UNIX SVR4. Его первый контакт с Ричем Стивенсом состоялся по электронной почте и касался опечатки в первой книге Стивенса «UNIX Network Programming». Позднее Стивенс выступал в качестве технического рецензента книги Раго «UNIX System V Network Programming». Раго, в свою очередь, взял на себя роль технического рецензента первого издания книги APUE и отлично справился с подготовкой второго и третьего изданий этой книги.

Третье издание, подготовленное Стивеном Раго, включает следующие изменения:

• Теперь книга охватывает 4 версию единой спецификации UNIX (Single UNIX Specification, SUS).

• Было убрано описание интерфейсов STREAMS, признанных устаревшими в SUS POSIX.1-2008.

• Обсуждение ведется на основе следующих платформ: FreeBSD 8.0, Linux 3.2.0 (дистрибутив Ubuntu 12.04), Mac OS X 10.6.8 (Darwin 10.80.0) и Solaris 10.

• В ядре Linux 2.6 был выполнен переход на поддержку Native POSIX Thread Library (NPTL).

• «Если говорить в общем, в это издание было включено более 70 новых интерфейсов, в том числе и интерфейсов асинхронного ввода/вывода, циклические блокировки (spin locks), барьеры (barriers) и семафоры POSIX. Описание наиболее устаревших интерфейсов было удалено, кроме некоторых, распространенных повсеместно.»

Стивенс считал, что лучший способ изучения кода – его чтение, и его книги отражают эту философию. Первое издание содержало главу «Взаимодействие с PostScript-принтером», которая включала законченную программу для взаимодействия с принтером, подключенным к компьютеру через последовательный порт RS-232. Большинство современных принтеров обеспечивают возможность доступа через сетевой интерфейс, поэтому во втором и третьем изданиях Раго изменил главу так, чтобы она отражала современные возможности, и вместе с тем сохранил ее первоначальный замысел.

Эта книга не является косметическим обновлением предыдущего издания. От начала и до конца ясно видно, как бережно относится Раго к первоначальному тексту и дополняет его новыми сведениями, отражающиеми изменения, произошедшие в последние несколько лет; он также сумел сохранить оригинальный простой и понятный стиль, свойственный Стивенсу.

 

Отличное обновление замечательной книги. 14 октября 2013

Джефф Мартин (Jeff Martin)

Книга «Advanced Programming in the UNIX Environment» (APUE) уже давно является эталонным справочником для тех, кто ищет информацию о системах программирования в среде UNIX. Лишь недавно мне была передана копия последнего издания книги для рецензии, но я уже достаточно давно знаком с этой книгой.

Пусть вас не смущает слово «UNIX» в названии книги – примеры, что приводятся в ней, одинаково хорошо работают на следующих платформах: Linux, Solaris, FreeBSD и Apple Mac OS X. Знания, полученные из этой книги, пригодятся во многих (если не во всех) современных операционных системах. Факт выхода третьего издания является ярким свидетельством качества материала и стиля его изложения. Если вы еще не знакомы с понятиями, представленными в этой книге, или просто желаете иметь точный и надежный справочник, третье издание APUE – верный выбор. Загляните в другие отзывы и вы увидите слова «классика», «библия» и «незаменимая». Книга удостоена такой характеристики небезосновательно, и она определенно заслуживает вашего внимания, если вы испытываете интерес к обсуждаемой в ней теме.

 

Я обожаю ее! 7 сентября 2013

Л. Фезенден (L. Fesenden)

Бог мой, насколько великолепна эта книга!

Книга «Advanced Programming in the Unix Environment» Стивенса и Раго, выдержавшая три издания, по сути является Библией по программированию в UNIX. Я не могу себе представить более или менее серьезного разработчика для UNIX/Linux/**ux, не имеющего своего экземпляра этой книги или, по крайней мере, не слышавшего о ней.

Это – *не* легкое чтиво. Это – серьезный справочник. Она является воплощением мечты большого специалиста, и вы наверняка захотите познакомиться с языком C, чтобы извлечь из нее максимум возможного.

Здесь вы найдете описание внутренних механизмов и идей, заложенных в эту операционную систему, как они действуют или как должны действовать, а также примеры кода. Наименее технической является первая обзорная глава. Она знакомит с такими понятиями, как ввод/вывод, файлы/каталоги, процессы, обработка ошибок и системные вызовы. Последующие главы посвящены более узким и специальным темам, таким как управление процессами, демоны, сигналы, многопоточное программирование и др. Как я уже сказал, в них приводится МАССА весьма специальной информации. Поэтому, если вы пишете что-то большее, чем простые сценарии, эта книга содержит то, что вам обязательно пригодится. Однако из вышесказанного не следует, что программисты – единственные, кто сможет извлечь пользу из этой книги. Даже не понимая примеры кода, читатель сможет получить достаточно полное представление об особенностях функционирования этой фантастической операционной системы. Я отношу себя именно к этой категории читателей. У меня есть некоторый опыт программирования на C, но, читая эту книгу, я обнаружил, что использую эту книгу с целью понять, как действуют внутренние механизмы.

Ни один уважающий себя специалист по программированию для UNIX/Linux не должен обходиться без этой книги в том или ином виде. Эта книга – не сборник рассказов, который можно прочитать всего один раз. Вы будете обращаться к ней за нужной информацией снова и снова. Я практически всегда оставляю отзывы о книгах только после их прочтения, но эта является исключением. В действительности я только собираюсь взять ее с собой на работу, чтобы иметь под рукой, поскольку я часто нуждаюсь в справочной информации.

Система Orphus