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

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

1300 грн.

Артикул: pit182 Категория: Метка:

Описание

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

Издательство — Питер

Язык — русский

Обложка — Твердый переплет

Год издания — 2019

Количество страниц — 1248

ISBN — 978-5-4461-0985-2

Бумага — белая, офсетная

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

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

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

Предисловие

Цель книги

Для кого эта книга

Linux и UNIX

Структура книги

Примеры программ

Упражнения

Стандарты и портируемость

Ядро Linux и версии библиотеки C

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

Об авторе

Благодарности

Разрешения

Обратная связь

Глава.1

История.и.стандарты

1. Краткая история UNIX и языка C

2. Краткая история Linux

2.1. Проект GNU

2.2. Ядро Linux

3. Стандартизация

3.1. Язык программирования C

3.2. Первые стандарты POSIX

3.3. X/Open Company и Open Group

3.4. SUSv3 и POSIX.1-2001

3.5. SUSv4 и POSIX.1-2008

3.6. Этапы развития стандартов UNIX

3.7. Стандарты реализаций

3.8. Linux, стандарты и нормативная база Linux

4. Резюме

Глава.2

Основные.понятия

1. Основа операционной системы: ядро

2. Оболочка

3. Пользователи и группы

4. Иерархия одного каталога. Что такое каталоги, ссылки и файлы

5. Модель файлового ввода-вывода

6. Программы

7. Процессы

8. Отображение в памяти

9. Статические и совместно используемые библиотеки

Межпроцессное взаимодействие и синхронизация

Сигналы

Потоки

Группы процессов и управление заданиями в оболочке

Сессии, управляющие терминалы и управляющие процессы

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

Дата и время

Клиент-серверная архитектура

Выполнение действий в реальном масштабе времени

Файловая система /proc

Резюме

8

Глава.3

Общее.представление.о.системном.программировании

1. Системные вызовы

2. Библиотечные функции

3. Стандартная библиотека языка C; GNU-библиотека C (glibc)

4. Обработка ошибок, возникающих при системных вызовах и вызовах библиотечных функций

5. Пояснения по поводу примеров программ, приводимых в книге

5.1. Ключи и аргументы командной строки

5.2. Типовые функции и заголовочные файлы

6. Вопросы переносимости

6.1. Макросы проверки возможностей

6.2. Типы системных данных

6.3. Прочие вопросы, связанные с портированием

7. Резюме

8. Упражнение

Глава.4

Файловый.ввод-вывод:.универсальная.модель.ввода-вывода

1. Общее представление

2. Универсальность ввода-вывода

3. Открытие файла: open()

3.1. Аргумент flags системного вызова open()

3.2. Ошибки, возвращаемые из системного вызова open()

3.3. Системный вызов creat()

4. Чтение из файла: read()

5. Запись в файл: write()

6. Закрытие файла: close()

7. Изменение файлового смещения: lseek()

8. Операции, не вписывающиеся в модель универсального ввода-вывода: ioctl()

9. Резюме

Упражнения

Глава.5

Файловый.ввод-вывод:.дополнительные.сведения

1. Атомарность и состояние гонки

2. Операции управления файлом: fcntl()

3. Флаги состояния открытого файла

4. Связь файловых дескрипторов с открытыми файлами

5. Дублирование дескрипторов файлов

6. Файловый ввод-вывод по указанному смещению: pread() и pwrite()

7. Ввод-вывод по принципу фрагментации-дефрагментации: readv() и writev()

8. Усечение файла: truncate() и ftruncate()

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

Ввод-вывод, осуществляемый в отношении больших файлов

Каталог /dev/fd

Создание временных файлов

Резюме

Упражнения

Глава.6

Процессы

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

2. Идентификатор процесса и идентификатор родительского процесса

3. Структура памяти процесса

4. Управление виртуальной памятью

5. Стек и стековые фреймы

96.6. Аргументы командной строки (argc, argv)

7. Список переменных среды

8. Выполнение нелокального перехода: setjmp() и longjmp()

9. Резюме

Упражнения

Глава.7

Выделение.памяти

1. Выделение памяти в куче

1.1. Установка крайней точки программы: brk() и sbrk()

1.2. Выделение памяти в куче: malloc() и free()

1.3. Реализация функций malloc() и free()

1.4. Другие методы выделения памяти в куче

2. Выделение памяти в стеке: alloca()

3. Резюме

4. Упражнения

Глава.8

Пользователи.и.группы

1. Файл паролей: /etc/passwd

2. Теневой файл паролей: /etc/shadow

3. Файл групп: /etc/group

4. Извлечение информации о пользователях и группах

5. Шифрование пароля и аутентификация пользователя

6. Резюме

7. Упражнения

Глава.9

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

1. Реальный идентификатор пользователя и реальный идентификатор группы

2. Действующий идентификатор пользователя

и действующий идентификатор группы

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

и установленным идентификатором группы

4. Сохраненный set-user-ID и сохраненный set-group-ID

5. Пользовательские и групповые ID файловой системы

6. Дополнительные групповые идентификаторы

7. Извлечение и модификация идентификаторов процессов

7.1. Извлечение и изменение реальных, действующих

и сохраненных установленных идентификаторов

7.2. Извлечение и изменение идентификаторов файловой системы

7.3. Извлечение и изменение дополнительных

групповых идентификаторов

7.4. Сводный обзор вызовов, предназначенных

для изменения идентификаторов процесса

7.5. Пример: вывод на экран идентификаторов процесса

8. Резюме

9. Упражнения

Глава

Время

1. Календарное время

2. Функции преобразования представлений времени

2.1. Преобразование значений типа time_t к виду, подходящему

для устройств вывода информации

2.2. Преобразования между time_t и разделенным календарным временем

2.3. Преобразования между разделенным календарным временем

и временем в печатном виде

10

10.3. Часовые пояса

4. Локали

5. Обновление системных часов

6. Программные часы (мгновения)

7. Время процесса

8. Резюме

9. Упражнение

Глава

Системные.ограничения.и.возможности

1. Системные ограничения

2. Извлечение в ходе выполнения программы значений ограничений

(и возможностей) системы

3. Извлечение в ходе выполнения программы значений ограничений

(и возможностей), связанных с файлами

4. Неопределенные ограничения

5. Системные возможности

6. Резюме

7. Упражнения

Глава

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

1. Файловая система /proc

1.1. Получение информации о процессе: /proc/PID

1.2. Системная информация, находящаяся в /proc

1.3 Доступ к файлам, находящимся в /proc

2. Идентификация системы: uname()

3. Резюме

4. Упражнения

Глава

Буферизация.файлового.ввода-вывода

1. Буферизация файлового ввода-вывода при работе в режиме ядра:

буферная кэш-память

2. Буферизация в библиотеке stdio

3. Управление буферизацией файлового ввода-вывода, осуществляемой в ядре

4. Обзор буферизации ввода-вывода

5. Уведомление ядра о схемах ввода-вывода

6. Обход буферной кэш-памяти: непосредственный ввод/вывод

7. Смешивание библиотечных функций и системных вызовов

для файлового ввода-вывода

8. Резюме

9. Упражнения

Глава

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

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

2. Диски и разделы

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

4. Индексные дескрипторы

5. Виртуальная файловая система

6. Журналируемые файловые системы

7. Иерархия одиночного каталога и точки монтирования

8. Монтирование и размонтирование файловых систем

8.1. Монтирование файловой системы: mount()

8.2. Размонтирование файловой системы: системные вызовы umount()

и umount2()

1114.9. Дополнительные функции монтирования

9.1. Монтирование файловой системы в нескольких точках монтирования

9.2. Создание стека монтирования в одной точке

9.3. Флаги монтирования, которые являются параметрами конкретной

точки монтирования

9.4. Связанные (синонимичные) точки монтирования

9.5. Рекурсивное связанное монтирование

Файловая система виртуальной памяти: tmpfs

Получение информации о файловой системе: statvfs()

Резюме

Упражнение

Глава

Атрибуты.файла

1. Извлечение информации о файле: stat()

2. Файловые метки времени

2.1. Изменение меток времени файла с помощью системных вызовов

utime() и utimes()

2.2. Изменение меток времени файла с помощью системного вызова

utimensat() и функции futimens()

3. Принадлежность файла

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

3.2. Изменение принадлежности файла: системные вызовы chown(),

fchown() и lchown()

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

4.1. Права доступа к обычным файлам

4.2. Права доступа к каталогам

4.3. Алгоритм проверки прав доступа

4.4. Проверка доступности файла: системный вызов access()

4.5. Биты set-user-ID, set-group-ID и закрепляющий

4.6. Маска режима создания файла процесса: umask()

4.7. Изменение прав доступа к файлу: системные вызовы chmod()

и fchmod()

5. Флаги индексного дескриптора (расширенные атрибуты файла

в файловой системе ext2)

6. Резюме

7. Упражнения

Глава

Расширенные.атрибуты

1. Обзор

2. Подробности реализации расширенных атрибутов

3. Системные вызовы для манипуляции расширенными атрибутами

4. Резюме

5. Упражнение

Глава

Списки.контроля.доступа

1. Обзор

2. Алгоритм проверки прав доступа с помощью списков контроля доступа

3. Длинная и краткая текстовые формы списков контроля доступа

4. Запись ACL_MASK и класс группы для ACL-списка

5. Команды getfacl и setfacl

6. ACL-списки по умолчанию и создание файла

7. Границы реализации списка контроля доступа

8. API для ACL-списков

12

17.9. Резюме

Упражнение

Глава

Каталоги.и.ссылки

1. Каталоги и (жесткие) ссылки

2. Символические (мягкие) ссылки

3. Создание и удаление (жестких) ссылок: системные вызовы link() и unlink()

4. Изменение имени файла: системный вызов rename()

5. Работа с символическими ссылками: системные вызовы symlink() и readlink()

6. Создание и удаление каталогов: системные вызовы mkdir() и rmdir()

7. Удаление файла или каталога: функция remove()

8. Чтение каталогов: функции opendir() и readdir()

9. Обход дерева файлов: функция nftw()

Текущий рабочий каталог процесса

Работа с использованием файлового дескриптора каталога

Изменение корневого каталога процесса: системный вызов chroot()

Анализ имени пути: функция realpath()

Синтаксический разбор строк с именем пути: функции dirname() и basename()

Резюме

Упражнения

Глава

Мониторинг.событий.файлов

1. Обзор

2. Интерфейс inotify

3. События inotify

4. Чтение событий inotify

5. Ограничения очереди и файлы /proc

6. Старая система мониторинга событий файлов: dnotify

7. Резюме

8. Упражнение

Глава

Сигналы:.фундаментальные.концепции

1. Концепции и общие сведения

2. Типы сигналов и действия по умолчанию

3. Изменение диспозиций сигналов: signal()

4. Введение в обработчики сигналов

5. Отправка сигналов: kill()

6. Проверка существования процесса

7. Другие способы отправки сигналов: raise() и killpg()

8. Отображение описаний сигналов

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

Сигнальная маска (блокирование доставки сигналов)

Ожидающие сигналы

Сигналы не ставятся в очередь

Изменение диспозиций сигналов: sigaction()

Ожидание сигнала: pause()

Резюме

Упражнения

Глава

Сигналы:.обработчики.сигналов

1. Проектирование обработчиков сигналов

1.1. Сигналы не ставятся в очередь (еще раз о

)

1.2. Реентерабельные функции и функции, безопасные

для асинхронных сигналов

1321.1.3. Глобальные переменные и тип данных sig_atomic_t

2. Другие методы завершения работы обработчика сигнала

2.1. Выполнение нелокального перехода из обработчика сигнала

2.2. Аварийное завершение процесса: abort()

3. Обработка сигнала на альтернативном стеке: signalstack()

4. Флаг SA_SIGINFO

5. Прерывание и повторный запуск системных вызовов

6. Резюме

7. Упражнение

Глава

Сигналы:.дополнительные.возможности

1. Файлы дампа ядра

2. Частные случаи доставки, диспозиции и обработки

3. Прерываемые и непрерываемые состояния сна процесса

4. Аппаратно генерируемые сигналы

5. Синхронная и асинхронная генерация сигнала

6. Тайминг и порядок доставки сигнала

7. Реализация и переносимость функции signal()

8. Сигналы реального времени

8.1. Отправка сигналов реального времени

8.2. Обработка сигналов реального времени

9. Ожидание сигнала с использованием маски: sigsuspend()

Синхронное ожидание сигнала

Получение сигналов через файловый дескриптор

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

Ранние API сигналов

Резюме

Упражнения

Глава

Таймеры.и.переход.в.режим.сна

1. Интервальные таймеры

2. Планирование и точность таймеров

3. Установка времени ожидания для блокирующих операций

4. Приостановка выполнения на определенный отрезок времени

(переход в режим сна)

4.1. Переход в режим сна (низкая точность): вызов sleep()

4.2. Переход в режим сна (высокая точность): вызов nanosleep()

5. Часы стандарта POSIX

5.1. Получение текущего значения часов: вызов clock_gettime()

5.2. Изменение значения часов: вызов clock_settime()

5.3. Получение идентификатора часов для определенного процесса

или потока

5.4. Улучшенный переход в режим сна (высокая точность):

вызов clock_nanosleep()

6. Интервальные таймеры POSIX

6.1. Создание таймера: вызов timer_create()

6.2. Запуск и остановка таймера: вызов timer_settime()

6.3. Получение текущего значения таймера: вызов timer_gettime()

6.4. Удаление таймера: вызов timer_delete()

6.5. Уведомление с помощью сигнала

6.6. Дополнительные срабатывания таймера

6.7. Уведомление с помощью потока

7. Таймеры, которые уведомляют с помощью файловых дескрипторов:

интерфейс timerfd

14

23.8. Резюме

9. Упражнения

Глава

Создание.процессов

1. Обзор вызовов fork(), exit(), wait() и execve()

2. Создание нового процесса: fork()

2.1. Совместный доступ к файлу родителя и потомка

2.2. Семантика памяти вызова fork()

3. Системный вызов vfork()

4. Состояние гонки после вызова fork()

5. Синхронизация с помощью сигналов как способ

избежать состояния гонки

6. Резюме

7. Упражнения

Глава

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

1. Завершение процесса: вызовы _exit() и exit()

2. Завершение процесса в подробностях

3. Обработчики выхода

4. Взаимодействие между буферами stdio и вызовами fork() и _exit()

5. Резюме

6. Упражнение

Глава

Мониторинг.дочерних.процессов

1. Ожидание дочернего процесса

1.1. Системный вызов wait()

1.2. Системный вызов waitpid()

1.3. Статус ожидания

1.4. Завершение процесса из обработчика сигнала

1.5. Системный вызов waitid()

1.6. Системные вызовы wait3() и wait4()

2. Процессы-«сироты» и процессы-«зомби»

3. Сигнал SIGCHLD

3.1. Установка обработчика сигнала SIGCHLD

3.2. Доставка сигнала SIGCHLD для остановленных потомков

3.3. Игнорирование завершенных дочерних процессов

4. Резюме

5. Упражнения

Глава

Выполнение.программы

1. Выполнение новой программы: execve()

2. Библиотечные функции семейства exec()

2.1. Переменная среды PATH

2.2. Задание аргументов программы в виде списка

2.3. Передача переменных среды вызывающего процесса новой программе

2.4. Выполнение файла через ссылку на его дескриптор: fexecve()

3. Интерпретируемые скрипты

4. Дескрипторы файлов и вызовы exec()

5. Сигналы и вызов exec()

6. Выполнение консольных команд: system()

7. Реализация функции system()

8. Резюме

9. Упражнения

15Глава

Подробнее.о.создании.процесса.и.выполнении.программы

1. Учет ресурсов, используемых процессом

2. Системный вызов clone()

2.1. Аргумент flags вызова clone()

2.2. Расширения к вызову waitpid() для клонированных потомков

3. Скорость создания процессов

4. Влияние вызовов exec() и fork() на атрибуты процесса

5. Резюме

6. Упражнение

Глава

Потоки.выполнения:.введение

1. Краткий обзор

2. Общие сведения о программном интерфейсе Pthreads

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

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

5. Идентификаторы потоков

6. Присоединение к завершенному потоку

7. Отсоединение потока

8. Атрибуты потоков

9. Сравнение потоков и процессов

Резюме

Упражнения

Глава

Потоки.выполнения:.синхронизация

1. Защита доступа к разделяемым переменным: мьютексы

1.1. Статически выделяемые мьютексы

1.2. Закрытие и открытие мьютекса

1.3. Производительность мьютексов

1.4. Взаимное блокирование мьютексов

1.5. Динамическая инициализация мьютексов

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

1.7. Типы мьютексов

2. Оповещение об изменении состояния: условные переменные

2.1. Статически выделяемые условные переменные

2.2. Оповещение и ожидание условных переменных

2.3. Проверка предиката условной переменной

2.4. Пример программы: подсоединение любого завершенного потока

2.5. Динамически выделяемые условные переменные

3. Резюме

4. Упражнения

Глава

Потоки.выполнения:.потоковая.безопасность.и.локальное.хранилище

1. Потоковая безопасность (и новый взгляд на реентерабельность)

2. Единовременная инициализация

3. Данные уровня потока

3.1. Данные уровня потока с точки зрения библиотечной функции

3.2. Обзор программного интерфейса для работы с данными уровня потока

3.3. Подробности о программном интерфейсе для работы

с данными уровня потока

3.4. Использование программного интерфейса для работы

с данными уровня потока

3.5. Ограничения реализации данных уровня потока

16

31.4. Локальное хранилище потока

5. Резюме

6. Упражнения

Глава

Потоки.выполнения:.отмена.потока

1. Отмена потока

2. Состояние и тип отмены

3. Точки отмены

4. Проверка возможности отмены потока

5. Обработчики, освобождающие ресурсы

6. Асинхронная отмена

7. Резюме

Глава

Потоки.выполнения:.дальнейшие.подробности

1. Стеки потоков

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

2.1. Как модель сигналов в UNIX соотносится с потоками

2.2. Изменение масок сигналов потока

2.3. Отправка сигнала потоку

2.4. Разумная обработка асинхронных сигналов

3. Потоки и управление процессами

4. Модели реализации потоков

5. Разные реализации POSIX-потоков в Linux

5.1. LinuxThreads

5.2. Библиотека NPTL

5.3. Выбор между разными реализациями многопоточности

6. Продвинутые возможности программного интерфейса Pthreads

7. Резюме

8. Упражнения

Глава

Группы.процессов,.сессии.и.управление.заданиями

1. Краткий обзор

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

3. Сессии

4. Контролирующие терминалы и контролирующие процессы

5. Активные и фоновые группы процессов

6. Сигнал SIGHUP

6.1. Обработка сигнала SIGHUP командной оболочкой

6.2. Сигнал SIGHUP и завершение контролирующего процесса

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

7.1. Управление заданиями в рамках командной оболочки

7.2. Реализация управления заданиями

7.3. Обрабатываем сигналы, связанные с управлением заданиями

7.4. Осиротевшие группы процессов (и новый взгляд на сигнал SIGHUP)

8. Резюме

9. Упражнения

Глава

Приоритеты.процессов.и.их.планирование

1. Приоритеты процессов (значение nice)

2. Обзор планирования в режиме реального времени

2.1. Политика SCHED_RR

2.2. Политика SCHED_FIFO

2.3. Политики SCHED_BATCH и SCHED_IDLE

1735.3. Программный интерфейс планирования в режиме реального времени

3.1. Диапазон приоритетов реального времени

3.2. Изменение и получение политик и приоритетов

3.3. Освобождение ресурсов процессора

3.4. Временной отрезок в политике SCHED_RR

4. Привязка к процессору

5. Резюме

6. Упражнения

Глава

Ресурсы.процессов

1. Ресурсы, использующиеся процессом

2. Ограничения на ресурсы для отдельных процессов

3. Подробности об отдельных ограничениях на ресурсы

4. Резюме

5. Упражнения

Глава

Демоны

1. Краткий обзор

2. Создание демона

3. Рекомендации по написанию демонов

4. Использование сигнала SIGHUP для повторной инициализации демона

5. Запись в журнал сообщений и ошибок с помощью системы syslog

5.1. Краткий обзор

5.2. Программный интерфейс syslog

5.3. Файл /etc/syslog.conf

6. Резюме

7. Упражнение

Глава

Написание.безопасных.программ.с.повышенными.привилегиями

1. Нужно ли программе устанавливать идентификаторы пользователя

или группы?

2. Работайте с минимальными привилегиями

3. Будьте осторожны при выполнении программы

4. Избегайте раскрытия деликатной информации

5. Изоляция процесса

6. Не забывайте о сигналах в состоянии гонки

7. Подводные камни, связанные с файловыми операциями

и вводом/выводом файлов

8. Не доверяйте внешнему вводу или среде выполнения

9. Остерегайтесь переполнений буфера

Остерегайтесь DoS-атак

Проверяйте результаты выполнения и предусматривайте

безопасное завершение в случае неудачи

Резюме

Упражнения

Глава

Система.возможностей

1. Зачем нужна система возможностей

2. Система возможностей в Linux

3. Возможности, связанные с процессами и файлами

3.1. Возможности процесса

3.2. Возможности файлов

3.3. Назначение разрешенных и действующих возможностей процесса

18

39.3.4. Для чего нужны разрешенные и действующие возможности файла

3.5. Для чего нужны наследуемые возможности процесса и файла

3.6. Назначение и просмотр возможностей файла из командной оболочки

4. Современная реализация системы возможностей

5. Изменение возможностей процесса во время выполнения exec()

5.1. Ограничивающий набор возможностей

5.2. Сохранение традиционной для администратора семантики

6. Как изменение пользовательского идентификатора влияет

на возможности процесса

7. Программное изменение возможностей процесса

8. Создание среды, в которой возможности являются единственным механизмом повышения привилегий

9. Определение возможностей, которые требуются программе

Резюме

Упражнение

Глава

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

1. Краткий обзор файлов utmp и wtmp

2. Программный интерфейс utmpx

3. Структура utmpx

4. Извлечение информации из файлов utmp и wtmp

5. Получение имени текущего пользователя: getlogin()

6. Запись в файлы utmp и wtmp данных о пребывании в системе

7. Файл lastlog

8. Резюме

9. Упражнения

Глава

Основы.разделяемых.библиотек

1. Библиотека объектов

2. Статические библиотеки

3. Краткий обзор разделяемых библиотек

4. Создание и использование разделяемых библиотек. Первые шаги

4.1. Создание разделяемой библиотеки

4.2. Адресно-независимый код

4.3. Использование статической библиотеки

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

5. Полезные инструменты для работы с разделяемыми библиотеками

6. Версии и соглашение об именовании разделяемых библиотек

7. Установка разделяемых библиотек

8. Совместимые и несовместимые библиотеки

9. Обновления разделяемых библиотек

Задание каталогов для поиска библиотеки в объектном файле

Поиск разделяемых библиотек на этапе выполнения

Разрешение символов на этапе выполнения

Использование статической библиотеки вместо динамической

Резюме

Упражнение

Глава

Продвинутые.возможности.разделяемых.библиотек

1. Динамически загружаемые библиотеки

1.1. Открытие разделяемой библиотеки: dlopen()

1.2. Анализ ошибок: dlerror()

1.3. Получение адреса символа: dlsym()

1942.1.4. Закрытие разделяемой библиотеки: dlclose()

1.5. Получение информации о загруженных символах: dladdr()

1.6. Получение доступа к символам главной программы

2. Управление видимостью символов

3. Версионные сценарии компоновщика

3.1. Управление видимостью символов с помощью версионных сценариев

3.2. Версионирование символов

4. Инициализация и финализация функций

5. Предварительная загрузка разделяемых библиотек

6. Мониторинг работы динамического компоновщика: LD_DEBUG

7. Резюме

8. Упражнения

Глава

Краткий.обзор.межпроцессного.взаимодействия

1. Классификация IPC-механизмов

2. Средства взаимодействия

3. Средства синхронизации

4. Сравнение IPC-механизмов

5. Резюме

6. Упражнения

Глава

Каналы.и.очереди.FIFO

1. Краткий обзор

2. Создание и использование каналов

3. Каналы как средство синхронизации процессов

4. Использование каналов для соединения фильтров

5. Взаимодействие с консольными командами с помощью канала: popen()

6. Каналы и буферизация стандартного ввода/вывода

7. Очереди FIFO

8. Клиент-серверные приложения на основе очередей FIFO

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

Семантика вызовов read() и write() в контексте каналов и очередей FIFO

Резюме

Упражнения

Глава

Отображение.в.память

1. Краткий обзор

2. Создание отображения: mmap()

3. Удаление отображения с участка памяти: munmap()

4. Отображение файлов

4.1. Приватные файловые отображения

4.2. Разделяемые файловые отображения

4.3. Крайние случаи

4.4. Взаимодействие защиты памяти и режима доступа к памяти

5. Синхронизация отображенного участка памяти: msync()

6. Дополнительные флаги вызова mmap()

7. Анонимные отображения

8. Изменение отображенного участка памяти: mremap()

9. Флаг MAP_NORESERVE и перерасход пространства подкачки

Флаг MAP_FIXED

Нелинейные отображения: remap_file_pages()

Резюме

Упражнения

20

Глава

Операции.с.виртуальной.памятью

1. Изменение защиты памяти: mprotect()

2. Блокирование памяти: mlock() и mlockall()

3. Определение местонахождения памяти: mincore()

4. Предсказание модели использования памяти в будущем: madvise()

5. Резюме

6. Упражнения

Глава

Введение.в.межпроцессное.взаимодействие.стандарта.POSIX

1. Краткий обзор программных интерфейсов

2. Резюме

Глава

Очереди.сообщений.стандарта.POSIX

1. Краткий обзор

2. Открытие, закрытие и удаление очереди сообщений

3. Связь между дескрипторами и очередями сообщений

4. Атрибуты очередей сообщений

5. Обмен сообщениями

5.1. Отправка сообщений

5.2. Получение сообщений

5.3. Отправка и получение сообщений с ограниченным временем ожидания

6. Оповещение о сообщении

6.1. Получение оповещения в виде сигнала

6.2. Получение уведомлений в отдельном потоке

7. Возможности, характерные для Linux

8. Ограничения, относящиеся к очередям сообщений

9. Резюме

Упражнения

Глава

Семафоры.стандарта.POSIX

1. Краткий обзор

2. Именованные семафоры

2.1. Открытие именованного семафора

2.2. Закрытие семафора

2.3. Удаление именованного семафора

3. Операции с семафорами

3.1. Декрементация семафора

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

3.3. Получение текущего значения семафора

4. Анонимные семафоры

4.1. Инициализация анонимного семафора

4.2. Уничтожение анонимного семафора

5. Сравнение POSIX-семафоров с мьютексами из библиотеки Pthreads

6. Ограничения, связанные с семафорами

7. Резюме

8. Упражнение

Глава

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

1. Краткий обзор

2. Создание объектов разделяемой памяти

3. Использование объектов разделяемой памяти

4. Удаление объектов разделяемой памяти

5. Сравнение программных интерфейсов для работы с разделяемой памятью

6. Резюме

21Глава

Блокировка.файлов

1. Краткий обзор

2. Блокировка файла с помощью вызова flock()

2.1. Семантика наследования и снятия блокировок

2.2. Ограничения вызова flock()

3. Блокировка записей с помощью вызова fcntl()

3.1. Структура flock

3.2. Аргумент cmd

3.3. Подробности об установке и снятии блокировок

3.4. Взаимная блокировка

3.5. Пример: программа для интерактивной блокировки

3.6. Пример: библиотека функций для установки блокировок

3.7. Производительность блокировок и их ограничения

3.8. Семантика наследования и снятия блокировок

3.9. Зависание блокировок и приоритет отложенных запросов

на их получение

4. Строгая блокировка

5. Файл /proc/locks

6. Выполнение только одного экземпляра программы

7. Устаревшие способы блокировки

8. Резюме

9. Упражнения

Глава

Сокеты:.введение

1. Краткий обзор

2. Создание сокета: socket()

3. Привязывание сокета к адресу: bind()

4. Универсальные структуры для хранения адресов сокетов: struct sockaddr

5. Потоковые сокеты

5.1. Ожидание входящих соединений: listen()

5.2. Прием соединения: accept()

5.3. Соединение с удаленным сокетом: connect()

5.4. Операции ввода/вывода с потоковыми сокетами

5.5. Закрытие соединения: close()

6. Датаграммные сокеты

6.1. Обмен датаграммами: recvfrom() и sendto()

6.2. Использование вызова connect() в сочетании с датаграммными сокетами

7. Резюме

Глава

Сокеты:.домен.UNIX

1. Адреса сокетов в домене UNIX: struct sockaddr_un

2. Потоковые сокеты в домене UNIX

3. Датаграммные сокеты в домене UNIX

4. Права доступа к сокетам домена UNIX

5. Создание соединенной пары сокетов: socketpair()

6. Абстрактное пространство имен сокетов в Linux

7. Резюме

8. Упражнения

Глава

Сокеты:.основы.сетей.TCP/IP

1. Интерсети

2. Сетевые протоколы и уровни

3. Канальный уровень

22

54.4. Сетевой уровень: IP

5. IP-адреса

6. Транспортный уровень

6.1. Номера портов

6.2. Протокол пользовательских датаграмм (UDP)

6.3. Протокол управления передачей (TCP)

7. Документы, выносимые на рассмотрение (RFC)

8. Резюме

Глава

Сокеты:.домены.сети.Интернет

1. Сокеты интернет-домена

2. Порядок байтов в сети

3. Представление данных

4. Адреса интернет-сокетов

5. Краткий обзор функций для преобразования сетевых адресов и имен служб

6. Функции inet_pton() и inet_ntop()

7. Пример клиент-серверного приложения (на основе датаграммных сокетов)

8. Система доменных имен (DNS)

9. Файл /etc/services

Преобразование имен узлов и служб, не зависящее от протокола

1. Функция getaddrinfo()

2. Удаление списков со структурами addrinfo: freeaddrinfo()

3. Выявление ошибок: gai_strerror()

4. Функция getnameinfo()

Пример клиент-серверного приложения на основе потоковых сокетов

Библиотека для работы с сокетами интернет-домена

Сравнение сокетов в UNIX- и интернет-доменах

Дополнительная информация

Резюме

Упражнения

Глава

Сокеты:.архитектура.сервера

1. Итерационные и параллельные серверы

2. Итерационный UDP-сервер echo

3. Параллельный TCP-сервер echo

4. Другие разновидности архитектуры параллельного сервера

5. Демон inetd

6. Резюме

7. Упражнения

Глава

Сокеты:.углубленный.материал

1. Частичное чтение и запись в контексте потоковых сокетов

2. Системный вызов shutdown()

3. Специальные системные вызовы для работы с сокетами: recv() и send()

4. Системный вызов sendfile()

5. Получение адреса сокета

6. Подробности реализации протокола TCP

6.1. Формат TCP-сегментов

6.2. Порядковые номера и подтверждения в протоколе TCP

6.3. Машина состояний и диаграмма перехода состояний

в протоколе TCP

6.4. Установка TCP-соединения

6.5. Разрыв TCP-соединения

2357.6.6. Вызов shutdown() для TCP-сокета

6.7. Состояние TIME_WAIT

7. Мониторинг сокетов: утилита netstat

8. Мониторинг данных, проходящих по протоколу TCP,

с помощью утилиты tcpdump

9. Параметры сокета

Параметр сокета SO_REUSEADDR

Наследование флагов и параметров сокета при выполнении

вызова accept()

Выбор между TCP и UDP

Продвинутые возможности

1. Внеканальные данные

2. Системные вызовы sendmsg() и recvmsg()

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

4. Получение учетных данных отправителя

5. Последовательный обмен пакетами

6. Протоколы транспортного уровня SCTP и DCCP

Резюме

Упражнения

Глава

Терминалы

1. Краткий обзор

2. Извлечение и изменение атрибутов терминала

3. Команда stty

4. Специальные символы терминала

5. Флаги терминала

6. Режимы ввода/вывода терминала

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

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

6.3. Режимы с обработкой, без обработки и cbreak

7. Скорость передачи данных в терминале

8. Управление последовательным портом

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

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

Резюме

Упражнения

Глава

Альтернативные.модели.ввода/вывода

1. Краткий обзор

1.1. Уведомления, срабатывающие по уровню или фронту

1.2. Применение неблокирующего режима в сочетании

с альтернативными моделями ввода/вывода

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

2.1. Системный вызов select()

2.2. Системный вызов poll()

2.3. Условия готовности файлового дескриптора

2.4. Сравнение вызовов select() и poll()

2.5. Проблемы, присущие вызовам select() и poll()

3. Ввод/вывод на основе сигналов

3.1. Установка владельца файлового дескриптора

3.2. Когда генерируется сигнал о возможности ввода/вывода?

3.3. Эффективное использование ввода/вывода на основе сигналов

4. Программный интерфейс epoll

24

59.4.1. Создание экземпляра epoll: вызов epoll_create()

4.2. Редактирование списка интереса epoll: вызов epoll_ctl()

4.3. Ожидание событий: вызов epoll_wait()

4.4. Подробности семантики интерфейса epoll

4.5. Производительность интерфейса epoll по сравнению

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

4.6. Уведомления, срабатывающие по фронту

5. Ожидание сигналов и готовности файловых дескрипторов

5.1. Системный вызов pselect()

5.2. Трюк с зацикленным каналом

6. Резюме

7. Упражнения

Глава

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

1. Краткий обзор

2. Псевдотерминалы стандарта UNIX 98

2.1. Открытие неиспользуемого первичного устройства:

вызов posix_openpt()

2.2. Изменение владельца и прав доступа к вторичному устройству:

вызов grantpt()

2.3. Разблокировка вторичного устройства: вызов unlockpt()

2.4. Получение имени вторичного устройства: вызов ptsname()

3. Открытие первичного устройства: вызов ptyMasterOpen()

4. Соединение процессов с помощью псевдотерминала: вызов ptyFork()

5. Ввод/вывод псевдотерминала

6. Реализация программы script(1)

7. Атрибуты терминала и размер окна

8. Резюме

9. Упражнения

Список.используемых.источников

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

Отзывы

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

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

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