Название книги: UNIX. Профессиональное программирование 3-е издание 
Год: 2014
Автор:  У. Ричард Стивенс, Стивен А. Раго
Страниц: 1100
Язык: Русский
Формат: pdf, fb2, epub, mobi
Размер: 10,8 MB, 5,02MB, 1,21 MB, 20,2 MB

Описание книги «UNIX. Профессиональное программирование 3-е издание (2014)»:

В каждом интервью или в дискуссии после лекции в какой-то момент мне задают один и тот же вопрос: «Ожидали ли вы, что UNIX продержится так долго?». Разумеется, в ответ я говорю одно и то же: «Нет, для нас это оказалось
полной неожиданностью». Кто-то даже высчитал, что система в том или ином
виде существует уже более половины всей жизни компьютерной индустрии.
Процесс развития индустрии был бурным и сложным. По сравнению с началом 70-х годов компьютерные технологии сильно изменились, сильнее всего за
счет глобальных сетевых технологий, вездесущей графики и широкого распространения персональных компьютеров, но система сумела учесть и вобрать
в себя все эти явления. Несмотря на то, что сегодня в области настольных систем доминируют Microsoft и Intel, рынок в определенной степени двигается
в направлении от единого поставщика к нескольким, а в последние годы все
более ориентируется на открытые стандарты и свободно распространяемые
системы

Оглавление:

Отзывы ко второму изданию . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .15
Отзывы к первому изданию . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .16
Вступительное слово ко второму изданию . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
Предисловие . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .19
Предисловие ко второму изданию . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .22
Предисловие к первому изданию . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .26
1. Обзор ОС UNIX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .31
1.1. Введение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .31
1.2. Архитектура UNIX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .31
1.3. Вход в систему . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .32
1.4. Файлы и каталоги . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .34
1.5. Ввод и вывод . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .39
1.6. Программы и процессы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .42
1.7. Обработка ошибок . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .46
1.8. Идентификация пользователя . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .48
1.9. Сигналы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .50
1.10. Представление времени . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .52
1.11. Системные вызовы и библиотечные функции . . . . . . . . . . . . . . . . . . . . . . . . .53
1.12. Подведение итогов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .56
2. Стандарты и реализации UNIX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .57
2.1. Введение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .57
2.2. Стандартизация UNIX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .57
2.2.1. ISO C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .57
2.2.2. IEEE POSIX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .59
2.2.3. Single UNIX Specification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .66
2.2.4. FIPS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .68
2.3. Реализации UNIX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .68
2.3.1. UNIX System V Release 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .69
2.3.2. 4.4BSD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .69
2.3.3. FreeBSD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .70
2.3.4. Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .71
2.3.5. Mac OS X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .71
Оглавление
8 Оглавление
2.3.6. Solaris . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .71
2.3.7. Прочие версии UNIX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .71
2.4. Связь между стандартами и реализациями . . . . . . . . . . . . . . . . . . . . . . . . . . .72
2.5. Ограничения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .72
2.5.1. Пределы ISO C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .73
2.5.2. Пределы POSIX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .76
2.5.3. Пределы XSI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .79
2.5.4. Функции sysconf, pathconf и fpathconf . . . . . . . . . . . . . . . . . . . . . . . . . .80
2.5.5. Неопределенные пределы времени выполнения . . . . . . . . . . . . . . . . . . .89
2.6. Необязательные параметры . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .93
2.7. Макроопределения контроля функциональных особенностей . . . . . . . . . . . .98
2.8. Элементарные системные типы данных . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .99
2.9. Различия между стандартами . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
2.10. Подведение итогов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
3. Файловый ввод/вывод . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
3.1. Введение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
3.2. Дескрипторы файлов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
3.3. Функции open и openat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .104
3.4. Функция creat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .108
3.5. Функция close . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .109
3.6. Функция lseek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .109
3.7. Функция read . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
3.8. Функция write . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
3.9. Эффективность операций ввода/вывода . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
3.10. Совместное использование файлов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
3.11. Атомарные операции . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .122
3.12. Функции dup и dup2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .124
3.13. Функции sync, fsync и fdatasync . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .126
3.14. Функция fcntl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
3.15. Функция ioctl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .133
3.16. /dev/fd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
3.17. Подведение итогов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .136
4. Файлы и каталоги . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .138
4.1. Введение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .138
4.2. Функции stat, fstat и lstat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .138
4.3. Типы файлов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
4.4. set-user-ID и set-group-ID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
4.5. Права доступа к файлу . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
4.6. Принадлежность новых файлов и каталогов . . . . . . . . . . . . . . . . . . . . . . . . . 147
4.7. Функции access и faccessat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
4.8. Функция umask . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .150
4.9. Функции chmod, fchmod и fchmodat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152
4.10. Бит sticky . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
4.11. Функции chown, fchown, fchownat и lchown . . . . . . . . . . . . . . . . . . . . . . . . . 156
4.12. Размер файла . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
Оглавление 9
4.13. Усечение файлов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .160
4.14. Файловые системы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .160
4.15. Функции link, linkat, unlink, unlinkat и remove . . . . . . . . . . . . . . . . . . . . . 164
4.16. Функции rename и renameat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
4.17. Символические ссылки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169
4.18. Создание и чтение символических ссылок . . . . . . . . . . . . . . . . . . . . . . . . . . 172
4.19. Временные характеристики файлов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173
4.20. Функции futimens, utimensat и utimes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175
4.21. Функции mkdir, mkdirat и rmdir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179
4.22. Чтение каталогов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .180
4.23. Функции chdir, fchdir и getcwd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .185
4.24. Специальные файлы устройств . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .188
4.25. Коротко о битах прав доступа к файлам . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
4.26. Подведение итогов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192
5. Стандартная библиотека ввода/вывода . . . . . . . . . . . . . . . . . . . . . . . . . . .194
5.1. Введение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .194
5.2. Потоки и объекты FILE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .194
5.3. Стандартные потоки ввода, вывода и сообщений об ошибках . . . . . . . . . . .196
5.4. Буферизация . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .196
5.5. Открытие потока . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .199
5.6. Чтение из потока и запись в поток . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .202
5.7. Построчный ввод/вывод . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .205
5.8. Эффективность стандартных функций ввода/вывода . . . . . . . . . . . . . . . . . .206
5.9. Ввод/вывод двоичных данных . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .209
5.10. Позиционирование в потоке . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210
5.11. Форматированный ввод/вывод . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212
5.12. Подробности реализации . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218
5.13. Временные файлы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .222
5.14. Потоки ввода/вывода в памяти . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .226
5.15. Альтернативы стандартной библиотеке ввода/вывода . . . . . . . . . . . . . . . .229
5.16. Подведение итогов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .230
6. Информация о системе и файлы данных . . . . . . . . . . . . . . . . . . . . . . . . . .232
6.1. Введение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .232
6.2. Файл паролей . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .232
6.3. Теневые пароли . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .236
6.4. Файл групп . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .238
6.5. Идентификаторы дополнительных групп . . . . . . . . . . . . . . . . . . . . . . . . . . . .239
6.6. Различия реализаций . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .241
6.7. Прочие файлы данных . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .242
6.8. Учет входов в систему . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .243
6.9. Информация о системе . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .244
6.10. Функции даты и времени . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .246
6.11. Подведение итогов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .254
10 Оглавление
7. Среда окружения процесса . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .256
7.1. Введение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .256
7.2. Функция main . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .256
7.3. Завершение работы процесса . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .256
7.4. Аргументы командной строки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .261
7.5. Список переменных окружения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .262
7.6. Раскладка памяти программы на языке C . . . . . . . . . . . . . . . . . . . . . . . . . . .263
7.7. Разделяемые библиотеки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .265
7.8. Распределение памяти . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .266
7.9. Переменные окружения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270
7.10. Функции setjmp и longjmp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274
7.11. Функции getrlimit и setrlimit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .281
7.12. Подведение итогов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .286
8. Управление процессами . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .288
8.1. Введение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .288
8.2. Идентификаторы процесса . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .288
8.3. Функция fork . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .290
8.4. Функция vfork . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .296
8.5. Функции exit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .298
8.6. Функции wait и waitpid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .301
8.7. Функция waitid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .307
8.8. Функции wait3 и wait4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .308
8.9. Гонка за ресурсами . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .309
8.10. Функции exec . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313
8.11. Изменение идентификаторов пользователя и группы . . . . . . . . . . . . . . . . . 321
8.12. Интерпретируемые файлы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .327
8.13. Функция system . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .331
8.14. Учет использования ресурсов процессами . . . . . . . . . . . . . . . . . . . . . . . . . .336
8.15. Идентификация пользователя . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .343
8.16. Планирование процессов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .344
8.17. Временные характеристики процесса . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .348
8.18. Подведение итогов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351
9. Взаимоотношения между процессами . . . . . . . . . . . . . . . . . . . . . . . . . . . . .353
9.1. Введение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .353
9.2. Вход с терминала. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .353
9.3. Вход в систему через сетевое соединение . . . . . . . . . . . . . . . . . . . . . . . . . . . .359
9.4. Группы процессов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .362
9.5. Сеансы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .364
9.6. Управляющий терминал . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .365
9.7. Функции tcgetpgrp, tcsetpgrp и tcgetsid . . . . . . . . . . . . . . . . . . . . . . . . . . . . .368
9.8. Управление заданиями . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .368
9.9. Выполнение программ командной оболочкой . . . . . . . . . . . . . . . . . . . . . . . . 373
9.10. Осиротевшие группы процессов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 377
9.11. Реализация в FreeBSD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .381
9.12. Подведение итогов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .383
Оглавление 11
10. Сигналы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .384
10.1. Введение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .384
10.2. Концепция сигналов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .384
10.3. Функция signal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .397
10.4. Ненадежные сигналы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .400
10.5. Прерванные системные вызовы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .402
10.6. Реентерабельные функции . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .405
10.7. Семантика сигнала SIGCLD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .408
10.8. Надежные сигналы. Терминология и семантика . . . . . . . . . . . . . . . . . . . . . 411
10.9. Функции kill и raise . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 412
10.10. Функции alarm и pause . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 414
10.11. Наборы сигналов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .420
10.12. Функция sigprocmask . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .422
10.13. Функция sigpending . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .424
10.14. Функция sigaction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .426
10.15. Функции sigsetjmp и siglongjmp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .433
10.16. Функция sigsuspend . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .436
10.17. Функция abort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .444
10.18. Функция system . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .446
10.19. Функции sleep, nanosleep и clock_nanosleep . . . . . . . . . . . . . . . . . . . . . . . .452
10.20. Функция sigqueue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .455
10.21. Сигналы управления заданиями . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 457
10.22. Имена и номера сигналов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .459
10.23. Подведение итогов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .461
11. Потоки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .463
11.1. Введение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .463
11.2. Концепция потоков . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .463
11.3. Идентификация потоков . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .465
11.4. Создание потока . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .466
11.5. Завершение потока . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .469
11.6. Синхронизация потоков . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 478
11.6.1. Мьютексы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .481
11.6.2. Предотвращение тупиковых ситуаций . . . . . . . . . . . . . . . . . . . . . . . . .483
11.6.3. Функция pthread_mutex_timedlock . . . . . . . . . . . . . . . . . . . . . . . . . . .489
11.6.4. Блокировки чтения-записи . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .490
11.6.5. Блокировки чтения-записи с тайм-аутом . . . . . . . . . . . . . . . . . . . . . . .495
11.6.6. Переменные состояния . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .496
11.6.7. Циклические блокировки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .499
11.6.8. Барьеры . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .501
11.7. Подведение итогов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .505
12. Управление потоками . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .507
12.1. Введение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .507
12.2. Пределы для потоков . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .507
12.3. Атрибуты потока . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .508
12 Оглавление
12.4. Атрибуты синхронизации . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 513
12.4.1. Атрибуты мьютексов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 513
12.4.2. Атрибуты блокировок чтения-записи . . . . . . . . . . . . . . . . . . . . . . . . . .523
12.4.3. Атрибуты переменных состояния . . . . . . . . . . . . . . . . . . . . . . . . . . . . .523
12.4.4. Атрибуты барьеров . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .524
12.5. Реентерабельность . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .525
12.6. Локальные данные потоков . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .530
12.7. Принудительное завершение потоков . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .535
12.8. Потоки и сигналы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .538
12.9. Потоки и fork . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .543
12.10. Потоки и операции ввода/вывода . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .548
12.11. Подведение итогов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .548
13. Процессы-демоны . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .550
13.1. Введение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .550
13.2. Характеристики демонов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .550
13.3. Правила программирования демонов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .553
13.4. Журналирование ошибок . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .556
13.5. Демоны в единственном экземпляре . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .561
13.6. Соглашения для демонов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .563
13.7. Модель клиент-сервер . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .568
13.8. Подведение итогов. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .569
14. Расширенные операции ввода/вывода . . . . . . . . . . . . . . . . . . . . . . . . . . . 570
14.1. Введение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 570
14.2. Неблокирующий ввод/вывод . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 570
14.3. Блокировка записей . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 574
14.4. Мультиплексирование ввода/вывода . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 591
14.4.1. Функции select и pselect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .594
14.4.2. Функция poll . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .599
14.5. Асинхронный ввод/вывод . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .602
14.5.1. Асинхронный вывод в System V . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .603
14.5.2. Асинхронный ввод/вывод в BSD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .604
14.5.3. Асинхронный ввод/вывод в POSIX . . . . . . . . . . . . . . . . . . . . . . . . . . . .605
14.6. Функции readv и writev . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 615
14.7. Функции readn и writen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 618
14.8. Операции ввода/вывода с отображаемой памятью . . . . . . . . . . . . . . . . . . . .620
14.9. Подведение итогов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .628
15. Межпроцессное взаимодействие . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .630
15.1. Введение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .630
15.2. Неименованные каналы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .632
15.3. Функции popen и pclose . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .639
15.4. Сопроцессы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .646
15.5. FIFO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 651
15.6. XSI IPC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .655
15.6.1. Идентификаторы и ключи . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .655
Оглавление 13
15.6.2. Структура прав доступа . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 657
15.6.3. Конфигурируемые пределы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .658
15.6.4. Преимущества и недостатки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .658
15.7. Очереди сообщений . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .660
15.8. Семафоры . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .666
15.9. Разделяемая память . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 673
15.10. Семафоры POSIX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .681
15.11. Свойства взаимодействий типа клиент-сервер . . . . . . . . . . . . . . . . . . . . . .688
15.12. Подведение итогов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .691
16. Межпроцессное взаимодействие в сети: сокеты . . . . . . . . . . . . . . . . . . .694
16.1. Введение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .694
16.2. Дескрипторы сокетов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .694
16.3. Адресация . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .699
16.3.1. Порядок байтов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .699
16.3.2. Форматы адресов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 701
16.3.3. Определение адреса . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .703
16.3.4. Присваивание адресов сокетам . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 711
16.4. Установление соединения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 712
16.5. Передача данных . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 716
16.6. Параметры сокетов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 731
16.7. Экстренные данные . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .734
16.8. Неблокирующий и асинхронный ввод/вывод . . . . . . . . . . . . . . . . . . . . . . . .735
16.9. Подведение итогов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 737
17. Расширенные возможности IPC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .738
17.1. Введение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .738
17.2. Сокеты домена UNIX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .738
17.2.1. Именованные сокеты домена UNIX . . . . . . . . . . . . . . . . . . . . . . . . . . . . 743
17.3. Уникальные соединения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 745
17.4. Передача дескрипторов файлов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 751
17.5. Сервер открытия файлов, версия 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .763
17.6. Сервер открытия файлов, версия 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .769
17.7. Подведение итогов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .780
18. Терминальный ввод/вывод . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .782
18.1. Введение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .782
18.2. Обзор . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .782
18.3. Специальные символы ввода . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 791
18.4. Получение и изменение характеристик терминала . . . . . . . . . . . . . . . . . . . 797
18.5. Флаги режимов терминала . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .798
18.6. Команда stty . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .807
18.7. Функции для работы со скоростью передачи . . . . . . . . . . . . . . . . . . . . . . . .807
18.8. Функции управления линией связи . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .808
18.9. Идентификация терминала . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .809
18.10. Канонический режим . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 815
18.11. Неканонический режим . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 819
14 Оглавление
18.12. Размер окна терминала . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .826
18.13. termcap, terminfo и curses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .828
18.14. Подведение итогов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .829
19. Псевдотерминалы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .830
19.1. Введение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .830
19.2. Обзор . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .830
19.3. Открытие устройств псевдотерминалов . . . . . . . . . . . . . . . . . . . . . . . . . . . .838
19.4. Функция pty_fork . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .843
19.5. Программа pty . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .845
19.6. Использование программы pty . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .850
19.7. Дополнительные возможности . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .858
19.8. Подведение итогов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .859
20. Библиотека базы данных . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .861
20.1. Введение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .861
20.2. Предыстория . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .861
20.3. Библиотека . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .863
20.4. Обзор реализации . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .865
20.5. Централизация или децентрализация? . . . . . . . . . . . . . . . . . . . . . . . . . . . .869
20.6. Одновременный доступ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 871
20.7. Сборка библиотеки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 872
20.8. Исходный код . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 873
20.9. Производительность . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .903
20.10. Подведение итогов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 910
21. Взаимодействие с сетевым принтером. . . . . . . . . . . . . . . . . . . . . . . . . . . . 912
21.1. Введение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 912
21.2. Протокол печати через Интернет . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 912
21.3. Протокол передачи гипертекста. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 916
21.4. Очередь печати . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 917
21.5. Исходный код . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 919
21.6. Подведение итогов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .969
A. Прототипы функций . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .971
B. Различные исходные тексты . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1015
C. Варианты решения некоторых упражнений . . . . . . . . . . . . . . . . . . . . . . 1024
Список литературы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1068
Алфавитный указатель . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1076

Скачать книгу: «UNIX. Профессиональное программирование 3-е издание (2014)»

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

Оцените книгу
[Всего: 0 Средний: 0]

Написать комментарий