Книга: Программирование для Linux. Профессиональный подход
Оглавление книги
- Об авторах
- Введение
- От издательства
- Часть I Сложные вопросы программирования в среде UNIX/Linux
- Глава 1 Начало
- 1.1. Редактор Emacs
- 1.1.1. Открытие исходного файла C/C++
- 1.1.2. Автоматическое форматирование
- 1.1.3. Синтаксические выделения
- 1.2. Компиляторы GCC
- 1.3. Автоматизация процесса с помощью GNU-утилиты make
- 1.4. GNU-отладчик gdb
- 1.5. Поиск дополнительной информации
- Глава 2 Написание качественных программ для среды GNU/Linux
- 2.1. Взаимодействие со средой выполнения
- 2.1.1. Список аргументов
- 2.1.2. Соглашения по работе с командной строкой в GNU/Linux
- 2.1.3. Функция getopt_long()
- 2.1.4. Стандартный ввод-вывод
- 2.1.5. Коды завершения программы
- 2.1.6. Среда выполнения
- Листинг 2.3. (print-env.c) Вывод переменных среды
- Листинг 2.4. (client.с) Часть сетевой клиентской программы
- 2.1.7. Временные файлы
- 2.2. Защита от ошибок
- 2.2.1. Макрос assert()
- 2.2.2. Ошибки системных вызовов
- 2.2.3. Коды ошибок системных вызовов
- 2.2.4. Ошибки выделения ресурсов
- 2.3. Создание и использование библиотек
- Глава 3 Процессы
- 3.1. Знакомство с процессами
- 3.1.1. Идентификаторы процессов
- 3.1.2. Получение списка активных процессов
- 3.1.3. Уничтожение процесса
- 3.2. Создание процессов
- 3.2.1. Функция system()
- 3.2.2. Функции fork() и exec()
- Вызов функции fork()
- Листинг 3.3. (fork.c) Ветвление программы с помощью функции fork()
- Семейство функций exec()
- Совместное использование функций fork() и exec()
- Листинг 3.4. (fork-exec.с) Совместное использование функций fork() и exec()
- 3.2.3. Планирование процессов
- 3.3. Сигналы
- 3.4. Завершение процесса
- Глава 4 Потоки
- 4.1. Создание потока
- 4.1.1. Передача данных потоку
- 4.1.2. Ожидание завершения потоков
- 4.1.3. Значения, возвращаемые потоками
- 4.1.4. Подробнее об идентификаторах потоков
- 4.1.5. Атрибуты потоков
- 4.2. Отмена потока
- 4.2.1. Синхронные и асинхронные потоки
- 4.2.2. Неотменяемые потоки
- 4.2.3. Когда необходимо отменять поток
- 4.3. Потоковые данные
- 4.4. Синхронизация потоков и критические секции
- 4.4.1. Состояние гонки
- 4.4.2. Исключающие семафоры
- 4.4.3. Взаимоблокировки исключающих семафоров
- 4.4.4. Неблокирующие проверки исключающих семафоров
- 4.4.5. Обычные потоковые семафоры
- 4.4.6. Сигнальные (условные) переменные
- Листинг 4.15. (spin-condvar.c) Простейшая реализация сигнальной переменной
- Листинг 4.14. (condvar.c) Управление работой потока с помощью сигнальной переменной
- 4.4.7. Взаимоблокировки двух и более потоков
- 4.5. Реализация потоков в Linux
- 4.6. Сравнение процессов и потоков
- Глава 5 Взаимодействие процессов
- 5.1. Совместно используемая память
- 5.1.1. Быстрое локальное взаимодействие
- 5.1.2. Модель памяти
- 5.1.3. Выделение сегментов памяти
- 5.1.4. Подключение и отключение сегментов
- 5.1.5. Контроль и освобождение совместно используемой памяти
- 5.1.6. Пример программы
- 5.1.7. Отладка
- 5.1.8. Проблема выбора
- 5.2. Семафоры для процессов
- 5.2.1. Выделение и освобождение семафоров
- 5.2.2. Инициализация семафоров
- 5.2.3. Операции ожидания и установки
- 5.2.4. Отладка семафоров
- 5.3. Отображение файлов в памяти
- 5.3.1. Отображение в памяти обычного файла
- 5.3.2. Примеры программ
- Листинг 5.5. (mmap-write.c) Запись случайного числа в файл, отображаемый в памяти
- Листинг 5.6. (mmap-read.c) Чтение случайного числа из файла, отображаемого в памяти
- 5.3.3. Совместный доступ к файлу
- 5.3.4. Частные отображаемые области
- 5.3.5. Применения функции mmap()
- 5.4. Каналы
- 5.4.1. Создание каналов
- 5.4.2. Взаимодействие родительского и дочернего процессов
- 5.4.3. Перенаправление стандартных потоков ввода, вывода и ошибок
- 5.4.4. Функции popen() и pclose()
- 5.4.5. Каналы FIFO
- 5.5. Сокеты
- 5.5.1. Концепции сокетов
- 5.5.2. Системные вызовы
- 5.5.3. Серверы
- 5.5.4. Локальные сокеты
- 5.5.5. Примеры программ, работающих с локальными сокетами
- Листинг 5.10. (socket-server.c) Сервер локального сокета
- Листинг 5.11. (socket-client.c) Клиент локального сокета
- 5.5.6. Internet-сокеты
- 5.5.7. Пары сокетов
- Часть II Секреты Linux
- Глава 6 Устройства
- 6.1. Типы устройств
- 6.2. Номера устройств
- 6.3. Файловые ссылки на устройства
- 6.4. Аппаратные устройства
- 6.5. Специальные устройства
- 6.5.1. /dev/null
- 6.5.2. /dev/zero
- 6.5.3. /dev/full
- 6.5.4. Устройства генерирования случайных чисел
- 6.5.5. Устройства обратной связи
- 6.6. Псевдотерминалы
- 6.7. Функция ioctl()
- Глава 7 Файловая система /proc
- 7.1. Извлечение информации из файловой системы /proc
- 7.2. Каталоги процессов
- 7.2.1. Файл /proc/self
- 7.2.2. Список аргументов процесса
- 7.2.3. Переменные среды процесса
- 7.2.4. Исполняемый файл процесса
- 7.2.5. Дескрипторы файлов процесса
- 7.2.6. Статистика использования процессом памяти
- 7.2.7. Статистика процесса
- 7.3. Аппаратная информация
- 7.3.1. Центральный процессор
- 7.3.2. Аппаратные устройства
- 7.3.3. Шина PCI
- 7.3.4. Последовательные порты
- 7.4. Информация о ядре
- 7.5. Дисководы, точки монтирования и файловые системы
- 7.6. Системная статистика
- Глава 8 Системные вызовы Linux
- 8.1. Команда strace
- 8.2. Функция access(): проверка прав доступа к файлу
- 8.3. Функция fcntl(): блокировки и другие операции над файлами
- 8.4. Функции fsync() и fdatasync(): очистка дисковых буферов
- 8.5. Функции getrlimit() и setrlimit(): лимиты ресурсов
- 8.6. Функция getrusage(): статистика процессов
- 8.7, Функция gettimeofday(): системные часы
- 8.8. Семейство функций mlock(): блокирование физической памяти
- 8.9. Функция mprotect(): задание прав доступа к памяти
- Корректное выделение памяти
- Листинг 8.7. (mprotect.c) Обнаружение попыток доступа к памяти благодаря функции mprotect()
- 8.10. Функция nanosleep(): высокоточная пауза
- 8.11. Функция readlink(): чтение символических ссылок
- 8.12. Функция sendfile(): быстрая передача данных
- 8.13. Функция setitimer(): задание интервальных таймеров
- 8.14. Функция sysinfo(): получение системной статистики
- 8.15. Функция uname()
- Глава 9 Встроенный ассемблерный код
- 9.1. Когда необходим ассемблерный код
- 9.2. Простая ассемблерная вставка
- 9.3. Расширенный синтаксис ассемблерных вставок
- 9.3.1. Ассемблерные инструкции
- 9.3.2. Выходные операнды
- 9.3.3. Входные операнды
- 9.3.4. Модифицируемые регистры
- 9.4. Пример
- Листинг 9.1. (bit-pos-loop.c) Нахождение позиции старшего значащего бита в цикле
- Листинг 9.2. (bit-pos-asm.c) Нахождение позиции старшего значащего бита с помощью инструкции bsrl
- 9.5. Вопросы оптимизации
- 9.6. Вопросы сопровождения и переносимости
- Глава 10 Безопасность
- 10.1. Пользователи и группы
- 10.2. Идентификаторы пользователей и групп, закрепленные за процессами
- 10.3. Права доступа к файлам
- 10.4. Реальные и эффективные идентификаторы
- 10.5. Аутентификация пользователей
- 10.6. Дополнительные проблемы безопасности
- Глава 11 Демонстрационное Linux-приложение
- 11.1. Обзор
- 11.2. Реализация
- 11.3. Модули
- 11.3.1. Отображение текущего времени
- 11.3.2. Отображение версии Linux
- 11.3.3. Отображение объема свободного дискового пространства
- 11.3.4. Статистика выполняющихся процессов
- 11.4. Работа с сервером
- 11.5. Вместо эпилога
- Часть III Приложения
- Приложение А Вспомогательные инструменты разработки
- А.1. Статический анализ программы
- А.2. Поиск ошибок в динамической памяти
- А.2.1. Программа для тестирования динамической памяти
- А.2.2. Проверка функции malloc()
- А.2.3. Поиск потерянных блоков памяти с помощью утилиты mtrace
- А.2.4. Библиотека ccmalloc
- А.2.5. Библиотека Electric Fence
- А.2.6. Выбор средств отладки
- А.2.7. Исходный текст программы, работающей с динамической памятью
- A.3. Профилирование
- Приложение Б Низкоуровневый ввод-вывод
- Б.1. Чтение и запись данных
- Б.1.1. Открытие файла
- Б.1.2. Закрытие файла
- Б.1.3. Запись данных
- Б.1.4. Чтение данных
- Чтение текстовых файлов DOS/Windows
- Листинг Б.4. (hexdump.c) Отображение шестнадцатеричного дампа файла
- Б.1.5. Перемещение по файлу
- Б.2. Функция stat()
- Б.3. Векторные чтение и запись
- Б.4. Взаимосвязь с библиотечными функциями ввода-вывода
- Б.5. Другие низкоуровневые операции
- Б.6. Чтение содержимого каталога
- Приложение В Таблица сигналов
- Приложение Г Internet-ресурсы
- Приложение Д Лицензия на публикацию программ с открытыми кодами, версия 1.0
- I. Требования к модифицированной и немодифицированной версиям
- II. Авторские права
- III. Область действия Лицензии
- IV. Требования к модифицированным материалам
- V. Рекомендации
- VI. Предусмотренные ограничения
- Дополнение, касающееся политики публикации
- Приложение Е Общая лицензия GNU
- Сноски из книги
- Содержание книги
- Популярные страницы
Похожие страницы
- Программирование для Linux. Профессиональный подход
- 1.1. Введение в объектно-ориентированное программирование
- InterBase Classic Server под Linux
- Каталог BIN в InterBase Classic Server для Linux
- Chapter 16. Commercial products based on Linux, iptables and netfilter
- Программирование на языке Пролог для искусственного интеллекта
- 1 Введение в Linux
- 4 Файловая система Linux
- Глава 1 Компьютер – с какой стороны к нему подходить
- 2.3. Подходы к оценке эффективности рекламы
- 1.2. Что такое Linux?
- 1.5.1. Red Hat Linux