Поделиться

UNIX. Профессиональное программирование, подробное справочное руководство

Для профессионалов.

Стивенс У. Ричард , Стивен А. Раго «UNIX. Профессиональное программирование» Питер, 2018 год, 944 стр., 3-е издание, ISBN: 978-5-4461-0649-3; (9,60 мб. pdf+приложения)

Эта книга подробное справочное руководство для профессиональных программистов, в среде UNIX. Её популярность обусловлена содержанием необходимой практической информации об управлении ядрами UNIX и Linux. Без этих знаний невозможно написать эффективный и надежный код. От основ — файлы, каталоги и процессы — вы постепенно перейдете к более сложным вопросам, таким как обработка сигналов и терминальный ввод/вывод, многопоточная модель выполнения и межпроцессное взаимодействие с применением сокетов. В общей сложности в этой книге охвачены более 70 интерфейсов, включая функции POSIX асинхронного ввода/вывода, циклические блокировки, барьеры и семафоры POSIX.

Оглавление книги

Содержание.

Глава 1. Обзор ОС UNIX 34
1.1. Введение 34
1.2. Архитектура UNIX 34
1.3. Вход в систему 35
1.4. Файлы и каталоги 37
1.5. Ввод и вывод 42
1.6. Программы и процессы 44
1.7. Обработка ошибок 48
1.8. Идентификация пользователя 50
1.9. Сигналы 52
1.10. Представление времени 54
10 Оглавление
1.11. Системные вызовы и библиотечные функции 55
1.12. Подведение итогов 58
Упражнения 58

Глава 2. Стандарты и реализации UNIX 59
2.1. Введение 59
2.2. Стандартизация UNIX 59
2.2.1. ISO C 59
2.2.2. IEEE POSIX 61
2.2.3. Single UNIX Specification 66
2.2.4. FIPS 70
2.3. Реализации UNIX 70
2.3.1. UNIX System V Release 4 71
2.3.2. 4.4BSD 71
2.3.3. FreeBSD 72
2.3.4. Linux 72
2.3.5. Mac OS X 73
2.3.6. Solaris 73
2.3.7. Прочие версии UNIX 73
2.4. Связь между стандартами и реализациями 74
2.5. Ограничения 74
2.5.1. Пределы ISO C 76
2.5.2. Пределы POSIX 77
2.5.3. Пределы XSI 81
2.5.4. Функции sysconf, pathconf и fpathconf 82
2.5.5. Неопределенные пределы времени выполнения 91
2.6. Необязательные параметры 94
2.7. Макроопределения проверки особенностей 99
2.8. Элементарные системные типы данных 100
2.9. Различия между стандартами 101
2.10. Подведение итогов 102
Упражнения 102

Глава 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 113
3.8. Функция write 114
3.9. Эффективность операций ввода/вывода 115
3.10. Совместное использование файлов 117
3.11. Атомарные операции 121
3.12. Функции dup и dup2 123
3.13. Функции sync, fsync и fdatasync 125
3.14. Функция fcntl 126
3.15. Функция ioctl 132
3.16. /dev/fd 133
3.17. Подведение итогов 135
Упражнения 135

Глава 4. Файлы и каталоги 137
4.1. Введение 137
4.2. Функции stat, fstat и lstat 137
4.3. Типы файлов 139
4.4. set-user-ID и set-group-ID 142
4.5. Права доступа к файлу 143
4.6. Принадлежность новых файлов и каталогов 146
4.7. Функции access и faccessat 147
4.8. Функция umask 149
4.9. Функции chmod, fchmod и fchmodat 151
4.10. Бит sticky 154
4.11. Функции chown, fchown, fchownat и lchown 155
4.12. Размер файла 157
4.13. Усечение файлов 158
4.14. Файловые системы 159
4.15. Функции link, linkat, unlink, unlinkat и remove 162
4.16. Функции rename и renameat 166
4.17. Символические ссылки 167
4.18. Создание и чтение символических ссылок 170
4.19. Временные характеристики файлов 171
4.20. Функции futimens, utimensat и utimes 174
4.21. Функции mkdir, mkdirat и rmdir 177
4.22. Чтение каталогов 178
4.23. Функции chdir, fchdir и getcwd 183
4.24. Специальные файлы устройств 186
4.25. Коротко о битах прав доступа к файлам 188
4.26. Подведение итогов 190
Упражнения 190

Глава 5. Стандартная библиотека ввода/вывода 192
5.1. Введение 192
5.2. Потоки и объекты FILE 192
5.3. Стандартные потоки ввода, вывода и сообщений об ошибках 194
12 Оглавление
5.4. Буферизация 194
5.5. Открытие потока 197
5.6. Чтение из потока и запись в поток 200
5.7. Построчный ввод/вывод 203
5.8. Эффективность стандартных функций ввода/вывода 204
5.9. Ввод/вывод двоичных данных 207
5.10. Позиционирование в потоке 208
5.11. Форматированный ввод/вывод 210
5.12. Подробности реализации 216
5.13. Временные файлы 220
5.14. Потоки ввода/вывода в памяти 223
5.15. Альтернативы стандартной библиотеке ввода/вывода 227
5.16. Подведение итогов 228
Упражнения 228

Глава 6. Информация о системе и файлы данных 229
6.1. Введение 229
6.2. Файл паролей 229
6.3. Теневые пароли 233
6.4. Файл групп 235
6.5. Идентификаторы дополнительных групп 236
6.6. Различия реализаций 238
6.7. Прочие файлы данных 239
6.8. Учет входов в систему 240
6.9. Информация о системе 241
6.10. Функции даты и времени 243
6.11. Подведение итогов 251
Упражнения 251

Глава 7. Окружение процесса 252
7.1. Введение 252
7.2. Функция main 252
7.3. Завершение работы процесса 252
7.4. Аргументы командной строки 257
7.5. Список переменных окружения 258
7.6. Организация памяти программы на языке C 259
7.7. Разделяемые библиотеки 261
7.8. Распределение памяти 262
7.9. Переменные окружения 266
7.10. Функции setjmp и longjmp 270
7.11. Функции getrlimit и setrlimit 277
7.12. Подведение итогов 282
Упражнения 282

Глава 8. Управление процессами 284
8.1. Введение 284
8.2. Идентификаторы процесса 284
8.3. Функция fork 286
8.4. Функция vfork 292
8.5. Функции exit 294
8.6. Функции wait и waitpid 296
8.7. Функция waitid 303
8.8. Функции wait3 и wait4 304
8.9. Гонка за ресурсами 305
8.10. Функции exec 308
8.11. Изменение идентификаторов пользователя и группы 315
8.12. Интерпретируемые файлы 321
8.13. Функция system 326
8.14. Учет использования ресурсов процессами 331
8.15. Идентификация пользователя 337
8.16. Планирование процессов 338
8.17. Временные характеристики процесса 342
8.18. Подведение итогов 345
Упражнения 345

Глава 9. Взаимоотношения между процессами 347
9.1. Введение 347
9.2. Вход с терминала 347
9.3. Вход в систему через сетевое соединение 353
9.4. Группы процессов 356
9.5. Сеансы 357
9.6. Управляющий терминал 359
9.7. Функции tcgetpgrp, tcsetpgrp и tcgetsid 361
9.8. Управление заданиями 362
9.9. Выполнение программ командной оболочкой 367
9.10. Осиротевшие группы процессов 371
9.11. Реализация в FreeBSD 374
9.12. Подведение итогов 376
Упражнения 376

Глава 10. Сигналы 377
10.1. Введение 377
10.2. Концепция сигналов 377
10.3. Функция signal 389
10.4. Ненадежные сигналы 393
10.5. Прерванные системные вызовы 394
10.6. Реентерабельные функции 397
10.7. Семантика сигнала SIGCLD 400
10.8. Надежные сигналы. Терминология и семантика 403
10.9. Функции kill и raise 404
10.10. Функции alarm и pause 406
10.11. Наборы сигналов 412
10.12. Функция sigprocmask 414
10.13. Функция sigpending 415
10.14. Функция sigaction 418
10.15. Функции sigsetjmp и siglongjmp 424
10.16. Функция sigsuspend 428
10.17. Функция abort 434
10.18. Функция system 437
10.19. Функции sleep, nanosleep и clock_nanosleep 442
10.20. Функция sigqueue 446
10.21. Сигналы управления заданиями 447
10.22. Имена и номера сигналов 450
10.23. Подведение итогов 451
Упражнения 452

Глава 11. Потоки 454
11.1. Введение 454
11.2. Понятие потоков 454
11.3. Идентификация потоков 455
11.4. Создание потока 457
11.5. Завершение потока 460
11.6. Синхронизация потоков 468
11.6.1. Мьютексы 471
11.6.2. Предотвращение тупиковых ситуаций 474
11.6.3. Функция pthread_mutex_timedlock 479
11.6.4. Блокировки чтения-записи 480
11.6.5. Блокировки чтения-записи с тайм-аутом 485
11.6.6. Переменные состояния 485
11.6.7. Циклические блокировки 489
11.6.8. Барьеры 491
11.7. Подведение итогов 495
Упражнения 495

Глава 12. Управление потоками 496
12.1. Введение 496
12.2. Пределы для потоков 496
12.3. Атрибуты потока 497
12.4. Атрибуты синхронизации 502
12.4.1. Атрибуты мьютексов 502
12.4.2. Атрибуты блокировок чтения-записи 511
12.4.3. Атрибуты переменных состояния 512
12.4.4. Атрибуты барьеров 513
12.5. Реентерабельность 513
12.6. Локальные данные потоков 518
12.7. Принудительное завершение потоков 523
12.8. Потоки и сигналы 527
12.9. Потоки и fork 531
12.10. Потоки и операции ввода/вывода 535
12.11. Подведение итогов 536
Упражнения 536

Глава 13. Процессы-демоны 538
13.1. Введение 538
13.2. Характеристики демонов 538
13.3. Правила программирования демонов 541
13.4. Журналирование ошибок 544
13.5. Демоны в единственном экземпляре 549
13.6. Соглашения для демонов 551
13.7. Модель клиент-сервер 555
13.8. Подведение итогов 556
Упражнения 556

Глава 14. Расширенные операции ввода/вывода 557
14.1. Введение 557
14.2. Неблокирующий ввод/вывод 557
14.3. Блокировка записей 561
14.4. Мультиплексирование ввода/вывода 577
14.4.1. Функции select и pselect 580
14.4.2. Функция poll 585
14.5. Асинхронный ввод/вывод 588
14.5.1. Асинхронный вывод в System V 589
14.5.2. Асинхронный ввод/вывод в BSD 590
14.5.3. Асинхронный ввод/вывод в POSIX 590
14.6. Функции readv и writev 600
14.7. Функции readn и writen 602
14.8. Операции ввода/вывода с отображаемой памятью 604
14.9. Подведение итогов 612
Упражнения 612

Глава 15. Межпроцессные взаимодействия 614
15.1. Введение 614
15.2. Неименованные каналы 616
15.3. Функции popen и pclose 623
15.4. Сопроцессы 629
15.5. FIFO 634
15.6. XSI IPC 638
15.6.1. Идентификаторы и ключи 638
15.6.2. Структура прав доступа 640
15.6.3. Конфигурируемые пределы 641
15.6.4. Преимущества и недостатки 641
15.7. Очереди сообщений 643
15.8. Семафоры 649
15.9. Разделяемая память 656
15.10. Семафоры POSIX 664
15.11. Свойства взаимодействий типа клиент-сервер 670
15.12. Подведение итогов 673
Упражнения 674

Глава 16. Межпроцессные взаимодействия в сети: сокеты 676
16.1. Введение 676
16.2. Дескрипторы сокетов 676
16.3. Адресация 681
16.3.1. Порядок байтов 681
16.3.2. Форматы адресов 683
16.3.3. Определение адреса 685
16.3.4. Присваивание адресов сокетам 692
16.4. Установка соединения 694
16.5. Передача данных 698
16.6. Параметры сокетов 712
16.7. Экстренные данные 715
16.8. Неблокирующий и асинхронный ввод/вывод 716
16.9. Подведение итогов 717
Упражнения 718

Глава 17. Расширенные возможности IPC 719
17.1. Введение 719
17.2. Сокеты домена UNIX 719
17.3. Уникальные соединения 725
17.4. Передача дескрипторов файлов 731
17.5. Сервер открытия файлов, версия 1 742
Оглавление 17
17.6. Сервер открытия файлов, версия 2 748
17.7. Подведение итогов 759
Упражнения 759

Глава 18. Терминальный ввод/вывод 761
18.1. Введение 761
18.2. Обзор 761
18.3. Специальные символы ввода 770
18.4. Получение и изменение характеристик терминала 776
18.5. Флаги режимов терминала 777
18.6. Команда stty 784
18.7. Функции для работы со скоростью передачи 785
18.8. Функции управления линией связи 786
18.9. Идентификация терминала 787
18.10. Канонический режим 793
18.11. Неканонический режим 796
18.12. Размер окна терминала 803
18.13. termcap, terminfo и curses 805
18.14. Подведение итогов 806
Упражнения 806

Глава 19. Псевдотерминалы 807
19.1. Введение 807
19.2. Обзор 807
19.3. Открытие устройств псевдотерминалов 814
19.4. Функция pty_fork 819
19.5. Программа pty 822
19.6. Использование программы pty 826
19.7. Дополнительные возможности 833
19.8. Подведение итогов 835
Упражнения 835

Глава 20. Библиотека базы данных 837
20.1. Введение 837
20.2. Предыстория 837
20.3. Библиотека 838
20.4. Обзор реализации 841
20.5. Централизация или децентрализация? 845
20.6. Одновременный доступ 847
20.7. Сборка библиотеки 849
20.8. Исходный код 849
20.9. Производительность 878
18 Оглавление
20.10. Подведение итогов 884
Упражнения 885

Глава 21. Взаимодействие с сетевым принтером 887
21.1. Введение 887
21.2. Протокол печати через Интернет 887
21.3. Протокол передачи гипертекста 891
21.4. Очередь печати 892
21.5. Исходный код 894
21.6. Подведение итогов 942
Упражнения 942

Приложение А. Прототипы функций
Приложение В. Различные исходные тексты
Приложение С. Варианты решения некоторых упражнений

СкачатьPDF


Поделиться