Глава 41. Основы совместно используемых библиотек
Содержание
- Глава 41. Основы совместно используемых библиотек
- 41.1 Объектные библиотеки
- 41.2 Статические библиотеки
- 41.3 Обзор совместно используемых библиотек
- 41.4 Создание и применение совместно используемых библиотек - Первый проход
- 41.5 Полезные инструменты для работы с совместно используемыми библиотеками
- 41.6 Врсии совместно используемых библиотек и соглашения именования
- 41.7 Установка совместно используемых библиотек
- 41.8 Сопоставление совместимых и несовместимых библиотек
- 41.9 Обновление совместно используемых библиотек
- 41.10 Определение каталогов поиска библиотек в объектном файле
- 41.11 Поиск совместно используемых библиотек в реальном масштабе времени
- 41.12 Разрешение символических ссылок времени исполнения
- 41.13 Применение статических библиотек вместо совместно используемых библиотек
- 41.14 Выводы
- 41.15 Упражнения
Уведомление о правах
Перевод: Copyright © 2017 . All rights reserved. Ссылки обязательны (Refs and links are obligatory). | http://www.mdl.ru портфолио SD DC |
HPE DL360 G10 since 4300$ |
- Введение~
- Предмет книги
- Для кого эта книга
- Linux и UNIX
- Применение и организация книги
- Примеры программ
- Упражнения
- Стандарты и перемещаемость
- Ядро Linux и версии библиотек C
- Применение определённого программного интерфейса из других языков программирования
- Об авторе
- Благодарности
- Разрешения
- Веб сайт и исходные коды программ
- Обратная связь
- Глава 1. История и стандарты-
- Глава 2. Фундаментальные понятия-
- 2.1 Центральная операционная система: Ядро
- 2.2 Оболочка
- 2.3 Пользователи и группы
- 2.4 Иерархия отдельного каталога, каталоги, ссылки и файлы
- 2.5 Модель файлового ввода/ вывода
- 2.6 Программы
- 2.7 Процессы
- 2.8 Соответствия памяти
- 2.9 Статические и совместно используемые библиотеки
- 2.10 Межпроцессное взаимодействие и синхронизация
- 2.11 Сигналы
- 2.12 Потоки
- 2.13 Группы процессов и управление заданием оболочки
- 2.14 Сеансы, терминалы управления и управляющие процессы
- 2.15 Псевдотерминалы
- 2.16 Дата и время
- 2.17 Архитектура клиент- сервер
- 2.18 Время исполнения
- 2.19 Файловая система /proc
- 2.20 Выводы
- Глава 3. Основы системного программирования-
- Глава 4. Файловый ввод/ вывод: Универсальная модель ввода/ вывода~
- Глава 5. Файловый ввод/ вывод: Дальнейшие подробности~
- 5.1 Условия атомарности и состязательности
- 5.2 Операции управления файлом: fcntl()
- 5.3 Флаги состояния открытого файла
- 5.4 Взаимосвязь между дескрипторами файла и открытыми файлами
- 5.5 Дублирование файловых дескрипторов
- 5.6 Файловый ввод/ вывод по определённому адресу: pread() and pwrite()
- 5.7 Чередующийся ввод/ вывод readv() and writev()
- 5.8 Усечения файла: truncate() и ftruncate()
- 5.9 Неблокируемый ввод/ вывод
- 5.10 Ввод/ вывод больших файлов
- 5.11 Каталог /dev/fd
- 5.12 Создание временных файлов
- 5.13 Выводы
- 5.14 Упражнения
- Глава 6. Процессы~
- 6.1 Процессы и программы
- 6.2 Идентификатор процесса и идентификатор родительского процесса
- 6.3 Схема памяти процесса
- 6.4 Управление виртуальной памятью
- 6.5 Стек и фреймы стека
- 6.6 параметры командной строки (argc, argv)
- 6.7 Перечень окружения
- 6.8 Исполнение нелокального GoTo: setjmp() и longjmp()
- 6.9 Выводы
- 6.10 Упражнения
- Глава 7. Выделение памяти-
- Глава 8. Пользователи и группы-
- Глава 9. Полномочия процесса~
- 9.1 Идентификатор реального пользователя и группы
- 9.2 Эффективный идентификатор пользователя и группы
- 9.3 Программы Set-User-ID и Set-Group-ID
- 9.4 Сохранённые Set-User-ID и Set-Group-ID
- 9.5 Идентификатор пользователя и группы файловой системы
- 9.6 Добавочный идентификатор группы
- 9.7 Процесс выборки и изменения полномочий
- 9.8 Выводы
- 9.9 Упражнения
- Глава 10. Время-
- Глава 11. Ограничения и варианты системы-
- Глава 12. Информация системы и процесса~
- Глава 13. Буферизация файлового ввода/ вывода~
- 13.1 Буферизация ядра файлового ввода/ вывода: буфер кэширования
- 13.2 Буферизация в библиотеке stdio
- 13.3 Управление буферизацией ядра файлового ввода/ вывода
- 13.4 Резюме буферизации ввода/ вывода
- 13.5 Рекомендации ядра по шаблонам ввода/ вывода
- 13.6 Проброс буфера кэширования: Прямой ввод/ вывод
- 13.7 Различные библиотечные функции системные вызовы для ввода/ вывода
- 13.8 Выводы
- 13.9 Упражнения
- Глава 14. Файловые системы-
- 14.1 Специализированные файлы устройств (Устройства)
- 14.2 Диски и разделы
- 14.3 Файловые системы
- 14.4 I-node
- 14.5 Виртуальная файловая система (VFS)
- 14.6 Файловые системы с журналированием
- 14.7 Иерархия отдельного каталога и точки монтирования
- 14.8 Монтирование и размонтирование файловых систем
- 14.9 Дополнительные свойства монтирования
- 14.10 Виртуальная файловая система: tmpfs
- 14.11 Получение информации о файловой системе: statvfs()
- 14.12 Выводы
- 14.13 Упражнения
- Глава 15. Атрибуты файла-
- 15.1 Выборка информации о файле: stat()
- 15.2 Временные штампы файла
- 15.3 Владение файлом
- 15.4 Права доступа к файлу
- 15.4.1 Права доступа обычным файлом
- 15.4.2 Права доступа к каталогу
- 15.4.3 Алгоритм проверки прав доступа
- 15.4.4 Проверка доступности файла: access()
- 15.4.5 Set-User-ID, Set-Group-ID и биты Sticky
- 15.4.6 Маска создания режима файла процесса: umask()
- 15.4.7 Изменение прав доступа к файлу: chmod() and fchmod()
- 15.5 Флаги I-node (Расширенные файловые атрибуты ext2)
- 15.6 Выводы
- 15.7 Упражнения
- Глава 16. Расширенные атрибуты-
- Глава 17. Списки управления доступом~
- Глава 18. Каталоги и ссылки-
- 18.1 Каталоги и (жёсткие) ссылки
- 18.2 Символические (мягкие) ссылки
- 18.3 Создание и удаление (жёстких) ссылок: link() и unlink()
- 18.4 Изменение имени файла: rename()
- 18.5 Работа с символическими ссылками: symlink() and readlink()
- 18.6 Создание и удаление каталогов: mkdir() и rmdir()
- 18.7 Удаление файла или каталога: remove()
- 18.8 Считывание каталогов: opendir() и readdir()
- 18.9 Проход по файловому дереву: nftw()
- 18.10 Текущий рабочий католог процесса
- 18.11 Работа относительно файлового дескриптора каталога
- 18.12 Изменение корневого каталога процесса: chroot()
- 18.13 Разрешение имени пути: realpath()
- 18.14 Разбор строк пути: dirname() и basename()
- 18.15 Выводы
- 18.16 Упражнения
- Глава 19. Мониторинг файловых событий-
- Глава 20. Сигналы: Основные понятия-
- 20.1 Основные понятия и обзор
- 20.2 Типы сигналов и действия по умолчанию
- 20.3 Изменение расстановки сигналов: signal()
- 20.4 Введение в обработчики сигналов
- 20.5 Отправка сигналов: kill()
- 20.6 Проверка наличия процесса
- 20.7 Другие варианты отправки сигналов: raise() and killpg()
- 20.8 Отображение описаний сигналов
- 20.9 Наборы сигналов
- 20.10 Маскирование сигнала (блокирование доставки сигнала)
- 20.11 Отложенные сигналы
- 20.12 Сигналы без очереди
- 20.13 Изменение расстановки сигналов: sigaction()
- 20.14 Ожидание сигнала: pause()
- 20.15 Выводы
- 20.16 Упражнения
- Глава 21. Сигналы: Обработчики сигналов-
- Глава 22. Сигналы: Расширенные свойства-
- 22.1 Файлы дампа ядра
- 22.2 Особые случаи доставки, расстановки и обработки
- 22.3 Состояния бездействия процесса прерываемые и не подлежащие прерыванию
- 22.4 Аппаратно вырабатываемые сигналы
- 22.5 Выработка синхронных и асинхронных сигналов
- 22.6 Времена и порядок доставки сигналов
- 22.7 Реализация переносимости signal()
- 22.8 Сигналы времени исполнения
- 22.9 Ожидание сигнала с применением маскирования: sigsuspend()
- 22.10 Синхронное ожидание сигнала
- 22.11 Опрос сигналов через файловые дескрипторы
- 22.12 Межпроцессное взаиможействие посредством сигналов
- 22.13 Более ранние API сигналов (System V и BSD)
- 22.14 Выводы
- 22.15 Упражнения
- Глава 23. Таймеры и бездействие-
- 23.1 Интервалы таймеров
- 23.2 Планирование и точность таймеров
- 23.3 Установка таймаутов на блокируемых операциях
- 23.4 Приостановка исполнения на фиксированный интервал (бездействие)
- 23.5 Часы POSIX
- 23.6 Интервалы тамеров POSIX
- 23.7 Таймеры, оповещающие через файловые дескрипторы: API timerfd
- 23.8 Выводы
- 23.9 Упражнения
- Глава 24. Создание процесса~
- Глава 25. Прекращение процесса~
- Глава 26. Мониторинг порождённого процесса~
- Глава 27. Исполнение программы~
- Глава 28. Дополнительные подробности создания процесса и исполнения программы~
- Глава 29. Потоки: Введение~
- Глава 30. Потоки: Синхронизация потоков~
- 30.1 Защита доступа к совместным переменным: Взаимные исключения
- 30.1.1 Статично выделенные взаимные исключения
- 30.1.2 Блокировка и снятие блокировки взаимных исключений
- 30.1.3 Производительность взаимных исключений
- 30.1.4 Тупиковые ситуации взаимных исключений
- 30.1.5 Динамическая инициализация взаимных исключений
- 30.1.6 Атрибуты взаимных исключений
- 30.1.7 Типы взаимных исключений
- 30.2 Отправка сигналов изменения состояния: условные переменные
- 30.3 Выводы
- 30.4 Упражнения
- 30.1 Защита доступа к совместным переменным: Взаимные исключения
- Глава 31. Потоки: Безопасность потока и сохранение для каждого потока~
- Глава 32. Потоки: Прекращение потока~
- Глава 33. Потоки: Дополнительные подробности~
- Глава 34. Группы процессов, сеансы и управление заданием~
- Глава 35. Приоритеты процесса и планирование~
- Глава 36. Ресурсы процесса~
- Глава 37. Демоны~
- Глава 38. Написание безопасной привилегированной программы-
- 38.1 Требуется ли программа Set-User-ID, либо Set-Group-ID?
- 38.2 Работа с наименьшими привилегиями
- 38.3 Будьте аккуратны при исполнении программы
- 38.4 Избегайте выставления чувствительной информации
- 38.5 Ограничивайте процесс
- 38.6 Позаботьтесь о сигналах и условиях соперничества
- 38.7 Выставляйте ловушки при выполнении файловых операций и ввода/ вывода файлов
- 38.8 Не доверяйте входным данным или своему окружению
- 38.9 Позаботьтесь о переполнении буфера
- 38.10 Побеспокойтесь об атаках отказа- в- обслуживании
- 38.11 Аккуратно проверяйте возвращаемые состояния и отказы
- 38.12 Выводы
- 38.13 Упражнения
- Глава 39. Возможности-
- 39.1 Обоснование возможностей
- 39.2 Возможности Linux
- 39.3 Возможности процесса и файла
- 39.3.1 Возможности процесса
- 39.3.2 Возможности файла
- 39.3.3 Установки разрешённой и действенной возможности цели процесса
- 39.3.4 Установки разрешённой и действенной возможности цели файла
- 39.3.5 Установки наследуемой цели процесса и файла
- 39.3.6 Назначение и просмотр возможностей файла в определённой оболочке
- 39.4 Реализация современных возможностей
- 39.5 Преобразование возможностей процесса на протяжении exec()
- 39.6 Воздействие изменения идентификатора пользователя на возможности процесса
- 39.7 Изменение возможностей процесса программными средствами
- 39.8 Более старые ядра и системы без возможностей файлов
- 39.9 Выводы
- 39.10 Выводы
- 39.11 Выводы
- 39.12 Упражнения
- Глава 40. Регистрационные учётные записи-
- Глава 41. Основы совместно используемых библиотек-
- 41.1 Объектные библиотеки
- 41.2 Статические библиотеки
- 41.3 Обзор совместно используемых библиотек
- 41.4 Создание и применение совместно используемых библиотек - Первый проход
- 41.5 Полезные инструменты для работы с совместно используемыми библиотеками
- 41.6 Врсии совместно используемых библиотек и соглашения именования
- 41.7 Установка совместно используемых библиотек
- 41.8 Сопоставление совместимых и несовместимых библиотек
- 41.9 Обновление совместно используемых библиотек
- 41.10 Определение каталогов поиска библиотек в объектном файле
- 41.11 Поиск совместно используемых библиотек в реальном масштабе времени
- 41.12 Разрешение символических ссылок времени исполнения
- 41.13 Применение статических библиотек вместо совместно используемых библиотек
- 41.14 Выводы
- 41.15 Упражнения
- Глава 42. Дополнительные свойства совместно используемых библиотек-
- 42.1 Динамически загружаемые библиотеки
- 42.1.1 Открытие совместно используемой библиотеки: dlopen()
- 42.1.2 Диагностика ошибок: dlerror()
- 42.1.3 Получение символического адреса: dlsym()
- 42.1.4 Закрытие совместно используемой библиотеки: dlclose()
- 42.1.5 Получение информации о загруженных символических адресах: dladdr()
- 42.1.6 Доступ к символическим адресам в Основной программе
- 42.2 Управление видимостью символических адресов
- 42.3 Сценарии версии компоновщика
- 42.4 Функции инициализации и завершения
- 42.5 Прелварительно загружаемые совместно используемые библиотеки
- 42.6 Мониторинг динамического компоновщика: LD_DEBUG
- 42.7 Выводы
- 42.8 Упражнения
- 42.1 Динамически загружаемые библиотеки
- Глава 43. Обзор взаимодействия процессов~
- Глава 44. Конвейеры и FIFO-
- 44.1 Обзор
- 44.2 Создание и применение конвейеров
- 44.3 Конвейеры как средство синхронизации процессов
- 44.4 Применение конвейеров для подключения фильтров
- 44.5 Общение командами оболочки через конвейер: popen()
- 44.6 Конвейеры и буферизация stdio
- 44.7 FIFO
- 44.8 Приложения клиент- сервер с применением FIFO
- 44.9 Неблокируемый ввод/ вывод
- 44.10 Семантики read() и write() в конвейерах и FIFO
- 44.11 Выводы
- 44.12 Упражнения
- Глава 45. Введение в IPC System V-
- 45.1 Обзор API
- 45.2 Ключевые моменты IPC
- 45.3 Связанные структуры данных и полномочия объектов
- 45.4 Идентификаторы IPC и приложения клиент- сервер
- 45.5 Применяемый IPC System V алгоритм вызовов get
- 45.6 Команды ipcs и ipcrm
- 45.7 Получение перечня всех объектов IPC
- 45.8 Пределы IPC
- 45.9 Выводы
- 45.10 Упражнения
- Глава 46. Очереди сообщений System V-
- 46.1 Создание или открытие очереди сообщений
- 46.2 Обмен сообщениями
- 46.3 Управление работой очереди сообщений
- 46.4 Связанная с очередью сообщений структура данных
- 46.5 Пределы очереди сообщений
- 46.6 Отображение всех очередей сообщений в данной системе
- 46.7 Программирование клиент- сервер с помощью очередей сообщений
- 46.8 Приложение файлового сервера с использованием очередей сообщений
- 46.9 Недостатки очередей сообщений System V
- 46.10 Выводы
- 46.11 Упражнения
- Глава 47. Семафоры System V-
- 47.1 Обзор
- 47.2 Создание или открытие набора семафора
- 47.3 Операции управления семафором
- 47.4 Связанная с семафором структура данных
- 47.5 Инициализация семафора
- 47.6 Работа семафора
- 47.7 Обработка операций множественной блокировки семафора
- 47.8 Отменяемые значения семафора
- 47.9 Реализация двоичного протокола семафора
- 47.10 Пределы семафора
- 47.11 Недостатки семафоров System V
- 47.12 Выводы
- 47.13 Упражнения
- Глава 48. Совместно используемая память System V-
- 48.1 Обзор
- 48.2 Создание и открытие сегмента совместно используемой памяти
- 48.3 Применение разделяемой памяти
- 48.4 Пример: Обмен данными через совместно используемую память
- 48.5 Местоположение совместно используемой памяти в виртуальной памяти
- 48.6 Хранение указателей в совместно используемой памяти
- 48.7 Операции управления совместно используемой памятью
- 48.8 Связанная с совместно используемой памятью структура данных
- 48.9 Пределы совместно используемой памяти
- 48.10 Выводы
- 48.11 Упражнения
- Глава 49. Соответствия памяти-
- 49.1 Обзор
- 49.2 Создание соответствия: mmap()
- 49.3 Удаление соответствия области: munmap()
- 49.4 Соответствие файлов
- 49.5 Синхронизация области соответствия: msync()
- 49.6 Дополнительные флаги mmap()
- 49.7 Анонимное соответствие
- 49.8 Повторное установление соответствия отображаемой области: mremap()
- 49.9 MAP_NORESERV и переполнение пространства подкачки
- 49.10 Флаг MAP_FIXED
- 49.11 Нелинейные соответствия: remap_file_pages()
- 49.12 Выводы
- 49.13 Упражнения
- Глава 50. Работа с виртуальной памятью-
- Глава 51. Введение в IPC Posix-
- Глава 52. Очереди сообщений Posix-
- 52.1 Обзор
- 52.2 Открытие, закрытие и снятие связей с очереди сообщений
- 52.3 Взаимосвязь между дескрипторами и очередями сообщений
- 52.4 Атрибуты очереди сообщений
- 52.5 Обмен сообщениями
- 52.6 Уведомление о сообщении
- 52.7 Специфичные для Linux свойства
- 52.8 Пределы очереди сообщений
- 52.9 Сравнение очередей сообщений POSIX и System V
- 52.10 Выводы
- 52.11 Упражнения
- Глава 53. Семафоры Posix-
- Глава 54. Совместно используемая память Posix-
- Глава 55. Блокировка файла-
- 55.1 Обзор
- 55.2 Блокировка файла с помощью flock()
- 55.3 Блокировка записи с помощью fcntl()
- 55.3.1 Тупиковое состояние
- 55.3.2 Пример: Взаимодейтсвие с блокированной программной
- 55.3.3 Пример: Библиотека функций блокировки
- 55.3.4 Пределы блокировки и производительность
- 55.3.5 Семантика наследования блокировки и освобождения
- 55.3.6 Истощение блокировки и приоритетность очереди запросов на блокировку
- 55.4 Обязательная блокировка
- 55.5 Файл /proc/locks
- 55.6 Исполнение только одного экземпляра программы
- 55.7 Более старые техники блокировки
- 55.8 Выводы
- 55.9 Упражнения
- Глава 56. Сокеты: Введение~
- Глава 57. Сокеты: Домены UNIX~
- Глава 58. Сокеты: Основы сетевой среды TCP/IP~
- Глава 59. Сокеты: Домены Интернет~
- 59.1 Сокеты домена Интернет
- 59.2 Порядок байт в сети
- 59.3 Представление данных
- 59.4 Адресация сокета интернет
- 59.5 Обзор функций хоста и службы преобразования
- 59.6 Функции inet_pton() и inet_ntop()
- 59.7 Пример клиент- сервер (Сокеты дейтаграмм)
- 59.8 DNS
- 59.9 Файл /etc/services
- 59.10 Не зависящий от протокола хост и служба преобразования
- 59.11 Пример клиент- сервер (Сокеты дейтаграмм)
- 59.12 Библиотека сокетов домена Интернет
- 59.13 Устаревшие API для хоста и служб преобразования
- 59.14 Сопоставление сокетов UNIX и Интернет
- 59.15 Дальнейшая информация
- 59.16 Выводы
- 59.17 Упражнения
- Глава 60. Сокеты: Архитектура сервера~
- Глава 61. Сокеты: Дополнительные вопросы~
- 61.1 Частичные чтение и запись в потоковых сокетах
- 61.2 Системный вызов shutdown()
- 61.3 Специфичные для сокета системные вызовы ввода/ вывода recv() и send()
- 61.4 Системный вызов sendfile()
- 61.5 Выборка адресов сокета
- 61.6 Более пристальное рассмотрение TCP
- 61.7 Мониторинг сокетов: netstat
- 61.8 Применение tcpdump для наблюдения за обменов TCP
- 61.9 Опции сокета
- 61.10 Опция сокета SO_REUSEADDR
- 61.11 Наследование флагов и опции по accept()
- 61.12 Сопоставление TCP и UDP
- 61.13 Расширенные свойства
- 61.14 Выводы
- 61.15 Упражнения
- Глава 62. Терминалы-
- 62.1 Обзор
- 62.2 Выборка и изменение атрибутов терминала
- 62.3 Команда stty
- 62.4 Специальные терминальные символы
- 62.5 Флаги терминала
- 62.6 Режимы ввода/ вывода терминала
- 62.7 Скорость линии терминала (Bit Rat)
- 62.8 Управление линией терминала
- 62.9 Размер окна терминала
- 62.10 Идентификация терминала
- 62.11 Выводы
- 62.12 Упражнения
- Глава 63. Альтернативные модели ввода/ вывода
- Глава 64. Псевдотерминалы-
- Приложение A. Отслеживание системных вызовов-
- Приложение B. разбор параметров командной строки-
- Приложение C. Приведение указателя NULL-
- Приложение D. Настройка ядра-
- Приложение E. Дальнейшие источники информации-
- Приложение F. Решения выбранных упражнений-
- Библиография-
- Указатель-