Linux API. Исчерпывающее руководство, Керриск М.

990 грн.

Описание

Linux API. Исчерпывающее руководство, Керриск М. купить книга Україна

n
n
n
nОбкладинка – тверда
n
nРік видання – 2019
n
nКількість сторінок – 1248
n
nISBN – 978-5-4461-0985-2
n
nБумага – біла, офсет
n

Про книгу Linux API. Исчерпывающее руководство, Керриск М.

nLinux Programming Interface – исчерпывающее руководство по программированию приложений для Linux и UNIX. Описанный здесь интерфейс применяется практически с любыми приложениями, работающими в операционных системах Linux или UNIX.В этой авторитетной книге эксперт по Linux Майкл Керриск, долгое время отвечавший за наполнение справочного ресурса man pages, подробно описывает библиотечные вызовы и библиотечные функции, которые понадобятся вам при системном программировании в Linux. Книга содержит множество продуманных полнофункциональных программ, доступно иллюстрирующих все теоретические концепции.
n

Linux API. Исчерпывающее руководство, Керриск М. оглавление

nПредисловие
n
nЦель книги
n
nДля кого эта книга
n
nLinux и UNIX
n
nСтруктура книги
n
nПримеры программ
n
nУпражнения
n
nСтандарты и портируемость
n
nЯдро Linux и версии библиотеки C
n
nИспользование программного интерфейса других языков программирования
n
nОб авторе
n
nБлагодарности
n
nРазрешения
n
nОбратная связь
n
nГлава.1
n
nИстория.и.стандарты
n
n1. Краткая история UNIX и языка C
n
n2. Краткая история Linux
n
n2.1. Проект GNU
n
n2.2. Ядро Linux
n
n3. Стандартизация
n
n3.1. Язык программирования C
n
n3.2. Первые стандарты POSIX
n
n3.3. X/Open Company и Open Group
n
n3.4. SUSv3 и POSIX.1-2001
n
n3.5. SUSv4 и POSIX.1-2008
n
n3.6. Этапы развития стандартов UNIX
n
n3.7. Стандарты реализаций
n
n3.8. Linux, стандарты и нормативная база Linux
n
n4. Резюме
n
nГлава.2
n
nОсновные.понятия
n
n1. Основа операционной системы: ядро
n
n2. Оболочка
n
n3. Пользователи и группы
n
n4. Иерархия одного каталога. Что такое каталоги, ссылки и файлы
n
n5. Модель файлового ввода-вывода
n
n6. Программы
n
n7. Процессы
n
n8. Отображение в памяти
n
n9. Статические и совместно используемые библиотеки
n
nМежпроцессное взаимодействие и синхронизация
n
nСигналы
n
nПотоки
n
nГруппы процессов и управление заданиями в оболочке
n
nСессии, управляющие терминалы и управляющие процессы
n
nПсевдотерминалы
n
nДата и время
n
nКлиент-серверная архитектура
n
nВыполнение действий в реальном масштабе времени
n
nФайловая система /proc
n
nРезюме
n
n8
n
nГлава.3
n
nОбщее.представление.о.системном.программировании
n
n1. Системные вызовы
n
n2. Библиотечные функции
n
n3. Стандартная библиотека языка C; GNU-библиотека C (glibc)
n
n4. Обработка ошибок, возникающих при системных вызовах и вызовах библиотечных функций
n
n5. Пояснения по поводу примеров программ, приводимых в книге
n
n5.1. Ключи и аргументы командной строки
n
n5.2. Типовые функции и заголовочные файлы
n
n6. Вопросы переносимости
n
n6.1. Макросы проверки возможностей
n
n6.2. Типы системных данных
n
n6.3. Прочие вопросы, связанные с портированием
n
n7. Резюме
n
n8. Упражнение
n
nГлава.4
n
nФайловый.ввод-вывод:.универсальная.модель.ввода-вывода
n
n1. Общее представление
n
n2. Универсальность ввода-вывода
n
n3. Открытие файла: open()
n
n3.1. Аргумент flags системного вызова open()
n
n3.2. Ошибки, возвращаемые из системного вызова open()
n
n3.3. Системный вызов creat()
n
n4. Чтение из файла: read()
n
n5. Запись в файл: write()
n
n6. Закрытие файла: close()
n
n7. Изменение файлового смещения: lseek()
n
n8. Операции, не вписывающиеся в модель универсального ввода-вывода: ioctl()
n
n9. Резюме
n
nУпражнения
n
nГлава.5
n
nФайловый.ввод-вывод:.дополнительные.сведения
n
n1. Атомарность и состояние гонки
n
n2. Операции управления файлом: fcntl()
n
n3. Флаги состояния открытого файла
n
n4. Связь файловых дескрипторов с открытыми файлами
n
n5. Дублирование дескрипторов файлов
n
n6. Файловый ввод-вывод по указанному смещению: pread() и pwrite()
n
n7. Ввод-вывод по принципу фрагментации-дефрагментации: readv() и writev()
n
n8. Усечение файла: truncate() и ftruncate()
n
n9. Неблокирующий ввод-вывод
n
nВвод-вывод, осуществляемый в отношении больших файлов
n
nКаталог /dev/fd
n
nСоздание временных файлов
n
nРезюме
n
nУпражнения
n
nГлава.6
n
nПроцессы
n
n1. Процессы и программы
n
n2. Идентификатор процесса и идентификатор родительского процесса
n
n3. Структура памяти процесса
n
n4. Управление виртуальной памятью
n
n5. Стек и стековые фреймы
n
n96.6. Аргументы командной строки (argc, argv)
n
n7. Список переменных среды
n
n8. Выполнение нелокального перехода: setjmp() и longjmp()
n
n9. Резюме
n
nУпражнения
n
nГлава.7
n
nВыделение.памяти
n
n1. Выделение памяти в куче
n
n1.1. Установка крайней точки программы: brk() и sbrk()
n
n1.2. Выделение памяти в куче: malloc() и free()
n
n1.3. Реализация функций malloc() и free()
n
n1.4. Другие методы выделения памяти в куче
n
n2. Выделение памяти в стеке: alloca()
n
n3. Резюме
n
n4. Упражнения
n
nГлава.8
n
nПользователи.и.группы
n
n1. Файл паролей: /etc/passwd
n
n2. Теневой файл паролей: /etc/shadow
n
n3. Файл групп: /etc/group
n
n4. Извлечение информации о пользователях и группах
n
n5. Шифрование пароля и аутентификация пользователя
n
n6. Резюме
n
n7. Упражнения
n
nГлава.9
n
nИдентификаторы.процессов
n
n1. Реальный идентификатор пользователя и реальный идентификатор группы
n
n2. Действующий идентификатор пользователя
n
nи действующий идентификатор группы
n
n3. Программы с установленным идентификатором пользователя
n
nи установленным идентификатором группы
n
n4. Сохраненный set-user-ID и сохраненный set-group-ID
n
n5. Пользовательские и групповые ID файловой системы
n
n6. Дополнительные групповые идентификаторы
n
n7. Извлечение и модификация идентификаторов процессов
n
n7.1. Извлечение и изменение реальных, действующих
n
nи сохраненных установленных идентификаторов
n
n7.2. Извлечение и изменение идентификаторов файловой системы
n
n7.3. Извлечение и изменение дополнительных
n
nгрупповых идентификаторов
n
n7.4. Сводный обзор вызовов, предназначенных
n
nдля изменения идентификаторов процесса
n
n7.5. Пример: вывод на экран идентификаторов процесса
n
n8. Резюме
n
n9. Упражнения
n
nГлава
n
nВремя
n
n1. Календарное время
n
n2. Функции преобразования представлений времени
n
n2.1. Преобразование значений типа time_t к виду, подходящему
n
nдля устройств вывода информации
n
n2.2. Преобразования между time_t и разделенным календарным временем
n
n2.3. Преобразования между разделенным календарным временем
n
nи временем в печатном виде
n
n10
n
n10.3. Часовые пояса
n
n4. Локали
n
n5. Обновление системных часов
n
n6. Программные часы (мгновения)
n
n7. Время процесса
n
n8. Резюме
n
n9. Упражнение
n
nГлава
n
nСистемные.ограничения.и.возможности
n
n1. Системные ограничения
n
n2. Извлечение в ходе выполнения программы значений ограничений
n
n(и возможностей) системы
n
n3. Извлечение в ходе выполнения программы значений ограничений
n
n(и возможностей), связанных с файлами
n
n4. Неопределенные ограничения
n
n5. Системные возможности
n
n6. Резюме
n
n7. Упражнения
n
nГлава
n
nИнформация.о.системе.и.процессе
n
n1. Файловая система /proc
n
n1.1. Получение информации о процессе: /proc/PID
n
n1.2. Системная информация, находящаяся в /proc
n
n1.3 Доступ к файлам, находящимся в /proc
n
n2. Идентификация системы: uname()
n
n3. Резюме
n
n4. Упражнения
n
nГлава
n
nБуферизация.файлового.ввода-вывода
n
n1. Буферизация файлового ввода-вывода при работе в режиме ядра:
n
nбуферная кэш-память
n
n2. Буферизация в библиотеке stdio
n
n3. Управление буферизацией файлового ввода-вывода, осуществляемой в ядре
n
n4. Обзор буферизации ввода-вывода
n
n5. Уведомление ядра о схемах ввода-вывода
n
n6. Обход буферной кэш-памяти: непосредственный ввод/вывод
n
n7. Смешивание библиотечных функций и системных вызовов
n
nдля файлового ввода-вывода
n
n8. Резюме
n
n9. Упражнения
n
nГлава
n
nФайловые.системы
n
n1. Специальные файлы устройств
n
n2. Диски и разделы
n
n3. Файловые системы
n
n4. Индексные дескрипторы
n
n5. Виртуальная файловая система
n
n6. Журналируемые файловые системы
n
n7. Иерархия одиночного каталога и точки монтирования
n
n8. Монтирование и размонтирование файловых систем
n
n8.1. Монтирование файловой системы: mount()
n
n8.2. Размонтирование файловой системы: системные вызовы umount()
n
nи umount2()
n
n1114.9. Дополнительные функции монтирования
n
n9.1. Монтирование файловой системы в нескольких точках монтирования
n
n9.2. Создание стека монтирования в одной точке
n
n9.3. Флаги монтирования, которые являются параметрами конкретной
n
nточки монтирования
n
n9.4. Связанные (синонимичные) точки монтирования
n
n9.5. Рекурсивное связанное монтирование
n
nФайловая система виртуальной памяти: tmpfs
n
nПолучение информации о файловой системе: statvfs()
n
nРезюме
n
nУпражнение
n
nГлава
n
nАтрибуты.файла
n
n1. Извлечение информации о файле: stat()
n
n2. Файловые метки времени
n
n2.1. Изменение меток времени файла с помощью системных вызовов
n
nutime() и utimes()
n
n2.2. Изменение меток времени файла с помощью системного вызова
n
nutimensat() и функции futimens()
n
n3. Принадлежность файла
n
n3.1. Принадлежность новых файлов
n
n3.2. Изменение принадлежности файла: системные вызовы chown(),
n
nfchown() и lchown()
n
n4. Права доступа к файлу
n
n4.1. Права доступа к обычным файлам
n
n4.2. Права доступа к каталогам
n
n4.3. Алгоритм проверки прав доступа
n
n4.4. Проверка доступности файла: системный вызов access()
n
n4.5. Биты set-user-ID, set-group-ID и закрепляющий
n
n4.6. Маска режима создания файла процесса: umask()
n
n4.7. Изменение прав доступа к файлу: системные вызовы chmod()
n
nи fchmod()
n
n5. Флаги индексного дескриптора (расширенные атрибуты файла
n
nв файловой системе ext2)
n
n6. Резюме
n
n7. Упражнения
n
nГлава
n
nРасширенные.атрибуты
n
n1. Обзор
n
n2. Подробности реализации расширенных атрибутов
n
n3. Системные вызовы для манипуляции расширенными атрибутами
n
n4. Резюме
n
n5. Упражнение
n
nГлава
n
nСписки.контроля.доступа
n
n1. Обзор
n
n2. Алгоритм проверки прав доступа с помощью списков контроля доступа
n
n3. Длинная и краткая текстовые формы списков контроля доступа
n
n4. Запись ACL_MASK и класс группы для ACL-списка
n
n5. Команды getfacl и setfacl
n
n6. ACL-списки по умолчанию и создание файла
n
n7. Границы реализации списка контроля доступа
n
n8. API для ACL-списков
n
n12
n
n17.9. Резюме
n
nУпражнение
n
nГлава
n
nКаталоги.и.ссылки
n
n1. Каталоги и (жесткие) ссылки
n
n2. Символические (мягкие) ссылки
n
n3. Создание и удаление (жестких) ссылок: системные вызовы link() и unlink()
n
n4. Изменение имени файла: системный вызов rename()
n
n5. Работа с символическими ссылками: системные вызовы symlink() и readlink()
n
n6. Создание и удаление каталогов: системные вызовы mkdir() и rmdir()
n
n7. Удаление файла или каталога: функция remove()
n
n8. Чтение каталогов: функции opendir() и readdir()
n
n9. Обход дерева файлов: функция nftw()
n
nТекущий рабочий каталог процесса
n
nРабота с использованием файлового дескриптора каталога
n
nИзменение корневого каталога процесса: системный вызов chroot()
n
nАнализ имени пути: функция realpath()
n
nСинтаксический разбор строк с именем пути: функции dirname() и basename()
n
nРезюме
n
nУпражнения
n
nГлава
n
nМониторинг.событий.файлов
n
n1. Обзор
n
n2. Интерфейс inotify
n
n3. События inotify
n
n4. Чтение событий inotify
n
n5. Ограничения очереди и файлы /proc
n
n6. Старая система мониторинга событий файлов: dnotify
n
n7. Резюме
n
n8. Упражнение
n
nГлава
n
nСигналы:.фундаментальные.концепции
n
n1. Концепции и общие сведения
n
n2. Типы сигналов и действия по умолчанию
n
n3. Изменение диспозиций сигналов: signal()
n
n4. Введение в обработчики сигналов
n
n5. Отправка сигналов: kill()
n
n6. Проверка существования процесса
n
n7. Другие способы отправки сигналов: raise() и killpg()
n
n8. Отображение описаний сигналов
n
n9. Наборы сигналов
n
nСигнальная маска (блокирование доставки сигналов)
n
nОжидающие сигналы
n
nСигналы не ставятся в очередь
n
nИзменение диспозиций сигналов: sigaction()
n
nОжидание сигнала: pause()
n
nРезюме
n
nУпражнения
n
nГлава
n
nСигналы:.обработчики.сигналов
n
n1. Проектирование обработчиков сигналов
n
n1.1. Сигналы не ставятся в очередь (еще раз о
n
n)
n
n1.2. Реентерабельные функции и функции, безопасные
n
nдля асинхронных сигналов
n
n1321.1.3. Глобальные переменные и тип данных sig_atomic_t
n
n2. Другие методы завершения работы обработчика сигнала
n
n2.1. Выполнение нелокального перехода из обработчика сигнала
n
n2.2. Аварийное завершение процесса: abort()
n
n3. Обработка сигнала на альтернативном стеке: signalstack()
n
n4. Флаг SA_SIGINFO
n
n5. Прерывание и повторный запуск системных вызовов
n
n6. Резюме
n
n7. Упражнение
n
nГлава
n
nСигналы:.дополнительные.возможности
n
n1. Файлы дампа ядра
n
n2. Частные случаи доставки, диспозиции и обработки
n
n3. Прерываемые и непрерываемые состояния сна процесса
n
n4. Аппаратно генерируемые сигналы
n
n5. Синхронная и асинхронная генерация сигнала
n
n6. Тайминг и порядок доставки сигнала
n
n7. Реализация и переносимость функции signal()
n
n8. Сигналы реального времени
n
n8.1. Отправка сигналов реального времени
n
n8.2. Обработка сигналов реального времени
n
n9. Ожидание сигнала с использованием маски: sigsuspend()
n
nСинхронное ожидание сигнала
n
nПолучение сигналов через файловый дескриптор
n
nМежпроцессное взаимодействие посредством сигналов
n
nРанние API сигналов
n
nРезюме
n
nУпражнения
n
nГлава
n
nТаймеры.и.переход.в.режим.сна
n
n1. Интервальные таймеры
n
n2. Планирование и точность таймеров
n
n3. Установка времени ожидания для блокирующих операций
n
n4. Приостановка выполнения на определенный отрезок времени
n
n(переход в режим сна)
n
n4.1. Переход в режим сна (низкая точность): вызов sleep()
n
n4.2. Переход в режим сна (высокая точность): вызов nanosleep()
n
n5. Часы стандарта POSIX
n
n5.1. Получение текущего значения часов: вызов clock_gettime()
n
n5.2. Изменение значения часов: вызов clock_settime()
n
n5.3. Получение идентификатора часов для определенного процесса
n
nили потока
n
n5.4. Улучшенный переход в режим сна (высокая точность):
n
nвызов clock_nanosleep()
n
n6. Интервальные таймеры POSIX
n
n6.1. Создание таймера: вызов timer_create()
n
n6.2. Запуск и остановка таймера: вызов timer_settime()
n
n6.3. Получение текущего значения таймера: вызов timer_gettime()
n
n6.4. Удаление таймера: вызов timer_delete()
n
n6.5. Уведомление с помощью сигнала
n
n6.6. Дополнительные срабатывания таймера
n
n6.7. Уведомление с помощью потока
n
n7. Таймеры, которые уведомляют с помощью файловых дескрипторов:
n
nинтерфейс timerfd
n
n14
n
n23.8. Резюме
n
n9. Упражнения
n
nГлава
n
nСоздание.процессов
n
n1. Обзор вызовов fork(), exit(), wait() и execve()
n
n2. Создание нового процесса: fork()
n
n2.1. Совместный доступ к файлу родителя и потомка
n
n2.2. Семантика памяти вызова fork()
n
n3. Системный вызов vfork()
n
n4. Состояние гонки после вызова fork()
n
n5. Синхронизация с помощью сигналов как способ
n
nизбежать состояния гонки
n
n6. Резюме
n
n7. Упражнения
n
nГлава
n
nЗавершение.работы.процесса
n
n1. Завершение процесса: вызовы _exit() и exit()
n
n2. Завершение процесса в подробностях
n
n3. Обработчики выхода
n
n4. Взаимодействие между буферами stdio и вызовами fork() и _exit()
n
n5. Резюме
n
n6. Упражнение
n
nГлава
n
nМониторинг.дочерних.процессов
n
n1. Ожидание дочернего процесса
n
n1.1. Системный вызов wait()
n
n1.2. Системный вызов waitpid()
n
n1.3. Статус ожидания
n
n1.4. Завершение процесса из обработчика сигнала
n
n1.5. Системный вызов waitid()
n
n1.6. Системные вызовы wait3() и wait4()
n
n2. Процессы-«сироты» и процессы-«зомби»
n
n3. Сигнал SIGCHLD
n
n3.1. Установка обработчика сигнала SIGCHLD
n
n3.2. Доставка сигнала SIGCHLD для остановленных потомков
n
n3.3. Игнорирование завершенных дочерних процессов
n
n4. Резюме
n
n5. Упражнения
n
nГлава
n
nВыполнение.программы
n
n1. Выполнение новой программы: execve()
n
n2. Библиотечные функции семейства exec()
n
n2.1. Переменная среды PATH
n
n2.2. Задание аргументов программы в виде списка
n
n2.3. Передача переменных среды вызывающего процесса новой программе
n
n2.4. Выполнение файла через ссылку на его дескриптор: fexecve()
n
n3. Интерпретируемые скрипты
n
n4. Дескрипторы файлов и вызовы exec()
n
n5. Сигналы и вызов exec()
n
n6. Выполнение консольных команд: system()
n
n7. Реализация функции system()
n
n8. Резюме
n
n9. Упражнения
n
n15Глава
n
nПодробнее.о.создании.процесса.и.выполнении.программы
n
n1. Учет ресурсов, используемых процессом
n
n2. Системный вызов clone()
n
n2.1. Аргумент flags вызова clone()
n
n2.2. Расширения к вызову waitpid() для клонированных потомков
n
n3. Скорость создания процессов
n
n4. Влияние вызовов exec() и fork() на атрибуты процесса
n
n5. Резюме
n
n6. Упражнение
n
nГлава
n
nПотоки.выполнения:.введение
n
n1. Краткий обзор
n
n2. Общие сведения о программном интерфейсе Pthreads
n
n3. Создание потоков
n
n4. Завершение потоков
n
n5. Идентификаторы потоков
n
n6. Присоединение к завершенному потоку
n
n7. Отсоединение потока
n
n8. Атрибуты потоков
n
n9. Сравнение потоков и процессов
n
nРезюме
n
nУпражнения
n
nГлава
n
nПотоки.выполнения:.синхронизация
n
n1. Защита доступа к разделяемым переменным: мьютексы
n
n1.1. Статически выделяемые мьютексы
n
n1.2. Закрытие и открытие мьютекса
n
n1.3. Производительность мьютексов
n
n1.4. Взаимное блокирование мьютексов
n
n1.5. Динамическая инициализация мьютексов
n
n1.6. Атрибуты мьютексов
n
n1.7. Типы мьютексов
n
n2. Оповещение об изменении состояния: условные переменные
n
n2.1. Статически выделяемые условные переменные
n
n2.2. Оповещение и ожидание условных переменных
n
n2.3. Проверка предиката условной переменной
n
n2.4. Пример программы: подсоединение любого завершенного потока
n
n2.5. Динамически выделяемые условные переменные
n
n3. Резюме
n
n4. Упражнения
n
nГлава
n
nПотоки.выполнения:.потоковая.безопасность.и.локальное.хранилище
n
n1. Потоковая безопасность (и новый взгляд на реентерабельность)
n
n2. Единовременная инициализация
n
n3. Данные уровня потока
n
n3.1. Данные уровня потока с точки зрения библиотечной функции
n
n3.2. Обзор программного интерфейса для работы с данными уровня потока
n
n3.3. Подробности о программном интерфейсе для работы
n
nс данными уровня потока
n
n3.4. Использование программного интерфейса для работы
n
nс данными уровня потока
n
n3.5. Ограничения реализации данных уровня потока
n
n16
n
n31.4. Локальное хранилище потока
n
n5. Резюме
n
n6. Упражнения
n
nГлава
n
nПотоки.выполнения:.отмена.потока
n
n1. Отмена потока
n
n2. Состояние и тип отмены
n
n3. Точки отмены
n
n4. Проверка возможности отмены потока
n
n5. Обработчики, освобождающие ресурсы
n
n6. Асинхронная отмена
n
n7. Резюме
n
nГлава
n
nПотоки.выполнения:.дальнейшие.подробности
n
n1. Стеки потоков
n
n2. Потоки и сигналы
n
n2.1. Как модель сигналов в UNIX соотносится с потоками
n
n2.2. Изменение масок сигналов потока
n
n2.3. Отправка сигнала потоку
n
n2.4. Разумная обработка асинхронных сигналов
n
n3. Потоки и управление процессами
n
n4. Модели реализации потоков
n
n5. Разные реализации POSIX-потоков в Linux
n
n5.1. LinuxThreads
n
n5.2. Библиотека NPTL
n
n5.3. Выбор между разными реализациями многопоточности
n
n6. Продвинутые возможности программного интерфейса Pthreads
n
n7. Резюме
n
n8. Упражнения
n
nГлава
n
nГруппы.процессов,.сессии.и.управление.заданиями
n
n1. Краткий обзор
n
n2. Группы процессов
n
n3. Сессии
n
n4. Контролирующие терминалы и контролирующие процессы
n
n5. Активные и фоновые группы процессов
n
n6. Сигнал SIGHUP
n
n6.1. Обработка сигнала SIGHUP командной оболочкой
n
n6.2. Сигнал SIGHUP и завершение контролирующего процесса
n
n7. Управление заданиями
n
n7.1. Управление заданиями в рамках командной оболочки
n
n7.2. Реализация управления заданиями
n
n7.3. Обрабатываем сигналы, связанные с управлением заданиями
n
n7.4. Осиротевшие группы процессов (и новый взгляд на сигнал SIGHUP)
n
n8. Резюме
n
n9. Упражнения
n
nГлава
n
nПриоритеты.процессов.и.их.планирование
n
n1. Приоритеты процессов (значение nice)
n
n2. Обзор планирования в режиме реального времени
n
n2.1. Политика SCHED_RR
n
n2.2. Политика SCHED_FIFO
n
n2.3. Политики SCHED_BATCH и SCHED_IDLE
n
n1735.3. Программный интерфейс планирования в режиме реального времени
n
n3.1. Диапазон приоритетов реального времени
n
n3.2. Изменение и получение политик и приоритетов
n
n3.3. Освобождение ресурсов процессора
n
n3.4. Временной отрезок в политике SCHED_RR
n
n4. Привязка к процессору
n
n5. Резюме
n
n6. Упражнения
n
nГлава
n
nРесурсы.процессов
n
n1. Ресурсы, использующиеся процессом
n
n2. Ограничения на ресурсы для отдельных процессов
n
n3. Подробности об отдельных ограничениях на ресурсы
n
n4. Резюме
n
n5. Упражнения
n
nГлава
n
nДемоны
n
n1. Краткий обзор
n
n2. Создание демона
n
n3. Рекомендации по написанию демонов
n
n4. Использование сигнала SIGHUP для повторной инициализации демона
n
n5. Запись в журнал сообщений и ошибок с помощью системы syslog
n
n5.1. Краткий обзор
n
n5.2. Программный интерфейс syslog
n
n5.3. Файл /etc/syslog.conf
n
n6. Резюме
n
n7. Упражнение
n
nГлава
n
nНаписание.безопасных.программ.с.повышенными.привилегиями
n
n1. Нужно ли программе устанавливать идентификаторы пользователя
n
nили группы?
n
n2. Работайте с минимальными привилегиями
n
n3. Будьте осторожны при выполнении программы
n
n4. Избегайте раскрытия деликатной информации
n
n5. Изоляция процесса
n
n6. Не забывайте о сигналах в состоянии гонки
n
n7. Подводные камни, связанные с файловыми операциями
n
nи вводом/выводом файлов
n
n8. Не доверяйте внешнему вводу или среде выполнения
n
n9. Остерегайтесь переполнений буфера
n
nОстерегайтесь DoS-атак
n
nПроверяйте результаты выполнения и предусматривайте
n
nбезопасное завершение в случае неудачи
n
nРезюме
n
nУпражнения
n
nГлава
n
nСистема.возможностей
n
n1. Зачем нужна система возможностей
n
n2. Система возможностей в Linux
n
n3. Возможности, связанные с процессами и файлами
n
n3.1. Возможности процесса
n
n3.2. Возможности файлов
n
n3.3. Назначение разрешенных и действующих возможностей процесса
n
n18
n
n39.3.4. Для чего нужны разрешенные и действующие возможности файла
n
n3.5. Для чего нужны наследуемые возможности процесса и файла
n
n3.6. Назначение и просмотр возможностей файла из командной оболочки
n
n4. Современная реализация системы возможностей
n
n5. Изменение возможностей процесса во время выполнения exec()
n
n5.1. Ограничивающий набор возможностей
n
n5.2. Сохранение традиционной для администратора семантики
n
n6. Как изменение пользовательского идентификатора влияет
n
nна возможности процесса
n
n7. Программное изменение возможностей процесса
n
n8. Создание среды, в которой возможности являются единственным механизмом повышения привилегий
n
n9. Определение возможностей, которые требуются программе
n
nРезюме
n
nУпражнение
n
nГлава
n
nУчет.входа.в.систему
n
n1. Краткий обзор файлов utmp и wtmp
n
n2. Программный интерфейс utmpx
n
n3. Структура utmpx
n
n4. Извлечение информации из файлов utmp и wtmp
n
n5. Получение имени текущего пользователя: getlogin()
n
n6. Запись в файлы utmp и wtmp данных о пребывании в системе
n
n7. Файл lastlog
n
n8. Резюме
n
n9. Упражнения
n
nГлава
n
nОсновы.разделяемых.библиотек
n
n1. Библиотека объектов
n
n2. Статические библиотеки
n
n3. Краткий обзор разделяемых библиотек
n
n4. Создание и использование разделяемых библиотек. Первые шаги
n
n4.1. Создание разделяемой библиотеки
n
n4.2. Адресно-независимый код
n
n4.3. Использование статической библиотеки
n
n4.4. Разделяемые библиотеки и имя soname
n
n5. Полезные инструменты для работы с разделяемыми библиотеками
n
n6. Версии и соглашение об именовании разделяемых библиотек
n
n7. Установка разделяемых библиотек
n
n8. Совместимые и несовместимые библиотеки
n
n9. Обновления разделяемых библиотек
n
nЗадание каталогов для поиска библиотеки в объектном файле
n
nПоиск разделяемых библиотек на этапе выполнения
n
nРазрешение символов на этапе выполнения
n
nИспользование статической библиотеки вместо динамической
n
nРезюме
n
nУпражнение
n
nГлава
n
nПродвинутые.возможности.разделяемых.библиотек
n
n1. Динамически загружаемые библиотеки
n
n1.1. Открытие разделяемой библиотеки: dlopen()
n
n1.2. Анализ ошибок: dlerror()
n
n1.3. Получение адреса символа: dlsym()
n
n1942.1.4. Закрытие разделяемой библиотеки: dlclose()
n
n1.5. Получение информации о загруженных символах: dladdr()
n
n1.6. Получение доступа к символам главной программы
n
n2. Управление видимостью символов
n
n3. Версионные сценарии компоновщика
n
n3.1. Управление видимостью символов с помощью версионных сценариев
n
n3.2. Версионирование символов
n
n4. Инициализация и финализация функций
n
n5. Предварительная загрузка разделяемых библиотек
n
n6. Мониторинг работы динамического компоновщика: LD_DEBUG
n
n7. Резюме
n
n8. Упражнения
n
nГлава
n
nКраткий.обзор.межпроцессного.взаимодействия
n
n1. Классификация IPC-механизмов
n
n2. Средства взаимодействия
n
n3. Средства синхронизации
n
n4. Сравнение IPC-механизмов
n
n5. Резюме
n
n6. Упражнения
n
nГлава
n
nКаналы.и.очереди.FIFO
n
n1. Краткий обзор
n
n2. Создание и использование каналов
n
n3. Каналы как средство синхронизации процессов
n
n4. Использование каналов для соединения фильтров
n
n5. Взаимодействие с консольными командами с помощью канала: popen()
n
n6. Каналы и буферизация стандартного ввода/вывода
n
n7. Очереди FIFO
n
n8. Клиент-серверные приложения на основе очередей FIFO
n
n9. Неблокирующий ввод/вывод
n
nСемантика вызовов read() и write() в контексте каналов и очередей FIFO
n
nРезюме
n
nУпражнения
n
nГлава
n
nОтображение.в.память
n
n1. Краткий обзор
n
n2. Создание отображения: mmap()
n
n3. Удаление отображения с участка памяти: munmap()
n
n4. Отображение файлов
n
n4.1. Приватные файловые отображения
n
n4.2. Разделяемые файловые отображения
n
n4.3. Крайние случаи
n
n4.4. Взаимодействие защиты памяти и режима доступа к памяти
n
n5. Синхронизация отображенного участка памяти: msync()
n
n6. Дополнительные флаги вызова mmap()
n
n7. Анонимные отображения
n
n8. Изменение отображенного участка памяти: mremap()
n
n9. Флаг MAP_NORESERVE и перерасход пространства подкачки
n
nФлаг MAP_FIXED
n
nНелинейные отображения: remap_file_pages()
n
nРезюме
n
nУпражнения
n
n20
n
nГлава
n
nОперации.с.виртуальной.памятью
n
n1. Изменение защиты памяти: mprotect()
n
n2. Блокирование памяти: mlock() и mlockall()
n
n3. Определение местонахождения памяти: mincore()
n
n4. Предсказание модели использования памяти в будущем: madvise()
n
n5. Резюме
n
n6. Упражнения
n
nГлава
n
nВведение.в.межпроцессное.взаимодействие.стандарта.POSIX
n
n1. Краткий обзор программных интерфейсов
n
n2. Резюме
n
nГлава
n
nОчереди.сообщений.стандарта.POSIX
n
n1. Краткий обзор
n
n2. Открытие, закрытие и удаление очереди сообщений
n
n3. Связь между дескрипторами и очередями сообщений
n
n4. Атрибуты очередей сообщений
n
n5. Обмен сообщениями
n
n5.1. Отправка сообщений
n
n5.2. Получение сообщений
n
n5.3. Отправка и получение сообщений с ограниченным временем ожидания
n
n6. Оповещение о сообщении
n
n6.1. Получение оповещения в виде сигнала
n
n6.2. Получение уведомлений в отдельном потоке
n
n7. Возможности, характерные для Linux
n
n8. Ограничения, относящиеся к очередям сообщений
n
n9. Резюме
n
nУпражнения
n
nГлава
n
nСемафоры.стандарта.POSIX
n
n1. Краткий обзор
n
n2. Именованные семафоры
n
n2.1. Открытие именованного семафора
n
n2.2. Закрытие семафора
n
n2.3. Удаление именованного семафора
n
n3. Операции с семафорами
n
n3.1. Декрементация семафора
n
n3.2. Инкрементация семафора
n
n3.3. Получение текущего значения семафора
n
n4. Анонимные семафоры
n
n4.1. Инициализация анонимного семафора
n
n4.2. Уничтожение анонимного семафора
n
n5. Сравнение POSIX-семафоров с мьютексами из библиотеки Pthreads
n
n6. Ограничения, связанные с семафорами
n
n7. Резюме
n
n8. Упражнение
n
nГлава
n
nРазделяемая.память.POSIX
n
n1. Краткий обзор
n
n2. Создание объектов разделяемой памяти
n
n3. Использование объектов разделяемой памяти
n
n4. Удаление объектов разделяемой памяти
n
n5. Сравнение программных интерфейсов для работы с разделяемой памятью
n
n6. Резюме
n
n21Глава
n
nБлокировка.файлов
n
n1. Краткий обзор
n
n2. Блокировка файла с помощью вызова flock()
n
n2.1. Семантика наследования и снятия блокировок
n
n2.2. Ограничения вызова flock()
n
n3. Блокировка записей с помощью вызова fcntl()
n
n3.1. Структура flock
n
n3.2. Аргумент cmd
n
n3.3. Подробности об установке и снятии блокировок
n
n3.4. Взаимная блокировка
n
n3.5. Пример: программа для интерактивной блокировки
n
n3.6. Пример: библиотека функций для установки блокировок
n
n3.7. Производительность блокировок и их ограничения
n
n3.8. Семантика наследования и снятия блокировок
n
n3.9. Зависание блокировок и приоритет отложенных запросов
n
nна их получение
n
n4. Строгая блокировка
n
n5. Файл /proc/locks
n
n6. Выполнение только одного экземпляра программы
n
n7. Устаревшие способы блокировки
n
n8. Резюме
n
n9. Упражнения
n
nГлава
n
nСокеты:.введение
n
n1. Краткий обзор
n
n2. Создание сокета: socket()
n
n3. Привязывание сокета к адресу: bind()
n
n4. Универсальные структуры для хранения адресов сокетов: struct sockaddr
n
n5. Потоковые сокеты
n
n5.1. Ожидание входящих соединений: listen()
n
n5.2. Прием соединения: accept()
n
n5.3. Соединение с удаленным сокетом: connect()
n
n5.4. Операции ввода/вывода с потоковыми сокетами
n
n5.5. Закрытие соединения: close()
n
n6. Датаграммные сокеты
n
n6.1. Обмен датаграммами: recvfrom() и sendto()
n
n6.2. Использование вызова connect() в сочетании с датаграммными сокетами
n
n7. Резюме
n
nГлава
n
nСокеты:.домен.UNIX
n
n1. Адреса сокетов в домене UNIX: struct sockaddr_un
n
n2. Потоковые сокеты в домене UNIX
n
n3. Датаграммные сокеты в домене UNIX
n
n4. Права доступа к сокетам домена UNIX
n
n5. Создание соединенной пары сокетов: socketpair()
n
n6. Абстрактное пространство имен сокетов в Linux
n
n7. Резюме
n
n8. Упражнения
n
nГлава
n
nСокеты:.основы.сетей.TCP/IP
n
n1. Интерсети
n
n2. Сетевые протоколы и уровни
n
n3. Канальный уровень
n
n22
n
n54.4. Сетевой уровень: IP
n
n5. IP-адреса
n
n6. Транспортный уровень
n
n6.1. Номера портов
n
n6.2. Протокол пользовательских датаграмм (UDP)
n
n6.3. Протокол управления передачей (TCP)
n
n7. Документы, выносимые на рассмотрение (RFC)
n
n8. Резюме
n
nГлава
n
nСокеты:.домены.сети.Интернет
n
n1. Сокеты интернет-домена
n
n2. Порядок байтов в сети
n
n3. Представление данных
n
n4. Адреса интернет-сокетов
n
n5. Краткий обзор функций для преобразования сетевых адресов и имен служб
n
n6. Функции inet_pton() и inet_ntop()
n
n7. Пример клиент-серверного приложения (на основе датаграммных сокетов)
n
n8. Система доменных имен (DNS)
n
n9. Файл /etc/services
n
nПреобразование имен узлов и служб, не зависящее от протокола
n
n1. Функция getaddrinfo()
n
n2. Удаление списков со структурами addrinfo: freeaddrinfo()
n
n3. Выявление ошибок: gai_strerror()
n
n4. Функция getnameinfo()
n
nПример клиент-серверного приложения на основе потоковых сокетов
n
nБиблиотека для работы с сокетами интернет-домена
n
nСравнение сокетов в UNIX- и интернет-доменах
n
nДополнительная информация
n
nРезюме
n
nУпражнения
n
nГлава
n
nСокеты:.архитектура.сервера
n
n1. Итерационные и параллельные серверы
n
n2. Итерационный UDP-сервер echo
n
n3. Параллельный TCP-сервер echo
n
n4. Другие разновидности архитектуры параллельного сервера
n
n5. Демон inetd
n
n6. Резюме
n
n7. Упражне

Отзывы

Отзывов пока нет.

Будьте первым, кто оставил отзыв на “Linux API. Исчерпывающее руководство, Керриск М.”

Ваш адрес email не будет опубликован. Обязательные поля помечены *