Содержание
Отзывы ко второму изданию 15
Отзывы к первому изданию 16
Вступительное слово ко второму изданию 17
Предисловие 19
Предисловие ко второму изданию 22
Предисловие к первому изданию 26
1. Обзор ОС UNIX
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
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
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. Файловый ввод/вывод
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. Файлы и каталоги
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
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. Стандартная библиотека ввода/вывода
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. Информация о системе и файлы данных
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
7. Среда окружения процесса
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. Управление процессами
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. Взаимоотношения между процессами
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
10. Сигналы
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. Потоки
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. Управление потоками
12.1. Введение 507
12.2. Пределы для потоков 507
12.3. Атрибуты потока 508
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. Процессы-демоны
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. Расширенные операции ввода/вывода
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. Межпроцессное взаимодействие
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
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. Межпроцессное взаимодействие в сети: сокеты
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
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. Терминальный ввод/вывод
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
18.12. Размер окна терминала 826
18.13. termcap, terminfo и curses 828
18.14. Подведение итогов 829
19. Псевдотерминалы
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. Библиотека базы данных
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. Взаимодействие с сетевым принтером
21.1. Введение
21.2. Протокол печати через Интернет 912
21.3. Протокол передачи гипертекста 916
21.4. Очередь печати 917
21.5. Исходный код 919
21.6. Подведение итогов 969
Приложения
A. Прототипы функций 971
B. Различные исходные тексты 1015
C. Варианты решения некоторых упражнений 1024
Список технической литературы 1068
Алфавитный указатель 1076
Добавить комментарий