В четвертом издании популярного руководства даны основы программирования в операционной системе Linux. Рассмотрены: использование библиотек С/С++ и стан-дартных средств разработки, организация системных вызовов, файловый ввод/вывод, взаимодействие процессов, программирование средствами командной оболочки, созда-ние графических пользовательских интерфейсов с помощью инструментальных средств GTK+ или Qt, применение сокетов и др. Описана компиляция программ, их компоновка с библиотеками и работа с терминальным вводом/выводом. Даны приемы написания приложений в средах GNOME и KDE, хранения данных с использованием СУБД MySQL и отладки программ. Книга хорошо структурирована, что делает обучение легким и быстрым. Оглавление
Введение
Для кого эта книга?
Чему посвящена книга?
Что вам потребуется для использования книги
Исходный программный код
Замечание, касающееся программного кода примеров
Общедоступная лицензия проекта GNU
Стилевое оформление, принятое в книге
Ошибки
Сайт p2p.wrox.com Глава 1. Приступая к работе
Введение в UNIX, Linux и проект GNU
Что такое ОС UNIX?
Что такое Linux?
Проект GNU и Фонд свободного ПО
Дистрибутивы Linux
Программирование в ОС Linux
Linux-программы
Текстовые редакторы
Компилятор языка С
Маршрутная карта системы разработки
Получение справки
Резюме Глава 2. Программирование средствами командной оболочки
Почему программа в командной оболочке?
Немного теории
Что такое командная оболочка?
Каналы и перенаправление
Перенаправление вывода
Перенаправление ввода
Каналы
Командная оболочка как язык программирования
Интерактивные программы
Создание сценария
Превращение сценария в исполняемый файл
Синтаксис командной оболочки
Переменные
Условия
Управляющие структуры
Функции
Команды
Выполнение команд
Встроенные документы
Отладка сценариев
По направлению к графическому режиму — утилита dialog
Соединяем все вместе
Требования
Проектирование
Резюме Глава 3. Работа с файлами
Структура файла в Linux
Каталоги
Файлы и устройства
Системные вызовы и драйверы устройств
Библиотечные функции
Низкоуровневый доступ к файлам
write
read
open
Исходные права доступа
Другие системные вызовы для управления файлами
Стандартная библиотека ввода/вывода
fopen
fread
fwrite
fclose
fflush
fseek
fgetc, getc и getchar
fputc, putc и putchar
fgets и gets
Форматированные ввод и вывод
printf, fprintf и sprintf
scanf, fscanf и sscanf
Другие потоковые функции
Ошибки потока
Потоки и дескрипторы файлов
Ведение файлов и каталогов
chmod
chown
unlink, link и symlink
mkdir и rmdir
chdir и getcwd
Просмотр каталогов
opendir
readdir
telldir
seekdir
closedir
Ошибки
strerror
perror
Файловая система procfs
Более сложные приемы: fcntl и mmap
fcntl
mmap
Резюме Глава 4. Окружение Linux
Аргументы программы
getopt
getopt_long
Переменные окружения
Применение переменных окружения
Переменная environ
Время и дата
Временные файлы
Информация о пользователе
Информация о компьютере
Ведение системных журналов
Ресурсы и ограничения
Резюме Глава 5. Терминал
Чтение с терминала и запись на терминал
Сравнение канонического и неканонического режимов
Обработка перенаправленного вывода
Диалог с терминалом
Драйвер терминала A и общий терминальный интерфейс
Обзор
Аппаратная модель
Структура типа termios
Режимы ввода
Режимы вывода
Режимы управления
Локальные режимы
Специальные управляющие символы
Скорость терминала
Дополнительные функции
Вывод терминала
Тип терминала
Установите тип вашего терминала
Применение характеристик terminfo
Обнаружение нажатий клавиш
Виртуальные консоли
Псевдотерминалы
Резюме Глава 6. Управление текстовыми экранами с помощью библиотеки curses
Компиляция с библиотекой curses
Терминология библиотеки curses и общие представления
Экран
Вывод на экран
Считывание с экрана
Очистка экрана
Перемещение курсора
Атрибуты символов
Клавиатура
Режимы клавиатуры
Клавиатурный ввод
Окна
Структура WINDOW
Универсальные функции
Перемещение и обновление окна
Оптимизация обновлений экрана
Вложенные окна
Дополнительная клавиатура
Применение цвета
Переопределение цветов
Панели
Приложение, управляющее коллекцией компакт-дисков
Начало нового приложения для работы с коллекцией компакт-дисков
Взгляд на функцию main
Формирование меню
Управление базой данных
Запросы к базе данных компакт-дисков
Резюме Глава 7. Управление данными
Управляемая память
Простое выделение памяти
Выделение огромных объемов памяти
Неправильное обращение к памяти
Указатель null
Освобождение памяти
Другие функции распределения памяти
Блокировка файлов
Создание файлов с блокировкой
Блокировка участков файла
Применение вызовов read и write при наличии блокировки
Конкурирующие блокировки
Другие команды блокировок
Взаимоблокировки
Базы данных
База данных dbm
Подпрограммы dbm
Функции доступа dbm
Дополнительные функции dbm
Приложение для работы с коллекцией компакт-дисков
Обновление проектного решения
Приложение управления базой данных компакт-дисков, использующее dbm
Резюме Глава 8. MySQL
Установка
Пакеты MySQL
Настройка после установки
Устранение неисправностей после установки
Администрирование MySQL
Команды
Создание пользователей и наделение их правами доступа
Пароли
Создание базы данных
Типы данных
Создание таблицы
Графические средства
Доступ к данным MySQL из программ на C
Подпрограммы подключения
Обработка ошибок
Выполнение SQL-операторов
Разные функции
Приложение для работы с базой данных компакт-дисков
Создание таблиц
Вставка данных
Доступ к данным приложения из программы на C
Резюме Глава 9. Средства разработки
Проблемы применения многочисленных исходных файлов
Команда make и make-файлы
Синтаксис make-файлов
Опции и параметры make
Комментарии в make-файле
Макросы в make-файле
Множественные задания
Встроенные правила
Суффиксы и шаблоны правил
Управление библиотеками с помощью make
Более сложная тема: make-файлы и подкаталоги
Версия GNU команд make и gcc
Управление исходным кодом
RCS
SCCS
Сравнение RCS и SCCS
CVS
Subversion
Написание интерактивного справочного руководства
Распространение программного обеспечения
Программа patch
Другие утилиты распространения
RPM-пакеты
Работа с файлами RPM-пакетов
Установка RPM-пакетов
Формирование RPM-пакетов
Пакеты других форматов
Среды разработки
KDevelop
Другие среды разработки
Резюме Глава 10. Отладка
Типы ошибок
Общие методы отладки
Программа с ошибками
Анализ кода
Оснащение средствами контроля
Контролируемое выполнение
Отладка с помощью gdb
Запуск gdb
Выполнение программы
Трассировка стека
Просмотр переменных
Вывод листинга программы
Установка точек останова
Вставка исправлений с помощью отладчика
Дополнительные сведения о gdb
Дополнительные средства отладки
Lint: удаление ошибок из ваших программ
Средства, отслеживающие вызовы функций
Выполнение профилирования с помощью prof/gprof
Проверки соблюдения условий
Устранение ошибок использования памяти
ElectricFence
valgrind
Резюме Глава 11. Процессы и сигналы
Что такое процесс?
Структура процесса
Таблица процессов
Просмотр процессов
Системные процессы
Планирование процессов
Запуск новых процессов
Замена образа процесса
Дублирование образа процесса
Ожидание процесса
Процессы-зомби
Перенаправление ввода и вывода
Потоки
Сигналы
Отправка сигналов
Множества сигналов
Резюме Глава 12. Потоки POSIX
Что такое поток?
Достоинства и недостатки потоков
Первая программа с применением потоков
Одновременное выполнение
Синхронизация
Синхронизация с помощью семафоров
Синхронизация с помощью мьютексов
Атрибуты потока
Атрибуты планирования потока
Отмена потока
Потоки в изобилии
Резюме Глава 13. Связь между процессами: каналы
Что такое канал?
Каналы процессов
popen
pclose
Отправка вывода в popen
Передача данных большого объема
Как реализован вызов popen
Вызов pipe
Родительский и дочерний процессы
Чтение закрытых каналов
Каналы, применяемые как стандартные ввод и вывод
Именованные каналы: FIFO
Доступ к FIFO
Более сложная тема: применение каналов FIFO в клиент-серверных приложениях
Приложение для работы с базой данных компакт-дисков
Цели
Реализация
Функции интерфейса клиента
Интерфейс сервера server.c
Канал
Резюме, касающееся приложения
Резюме Глава 14. Семафоры, совместно используемая память и очереди сообщений
Семафоры
Описание семафора
Теоретический пример
Реализация семафоров в Linux
Применение семафоров
Совместно используемая память
shmget
shmat
shmdt
shmctl
Очереди сообщений
msgget
msgsnd
msgrcv
msgctl
Приложение для работы с базой данных компакт-дисков
Пересмотр функций сервера
Пересмотр функций клиента
Команды состояния IPC
Отображение состояния семафора
Отображение состояния совместно используемой памяти
Отображение состояния очереди сообщений
Резюме Глава 15. Сокеты
Что такое сокет?
Соединения на базе сокетов
Атрибуты сокета
Создание сокета
Адреса сокетов
Именование сокета
Создание очереди сокетов
Прием запросов на соединение
Запросы соединений
Закрытие сокета
Обмен данными с помощью сокетов
Порядок байтов на компьютере и в сети
Сетевая информация
Интернет-демон (xinetd/inetd)
Параметры сокета
Множественные клиенты
select
Множественные клиенты
Дейтаграммы
Резюме Глава 16. Программирование в GNOME с помощью GTK+
Введение в систему X
X-сервер
X-клиент
X-протокол
Xlib
Комплекты инструментов
Оконные менеджеры
Другие способы создания GUI — платформно-независимые оконные API
Введение в GTK+
Система типов GLib
Система объектов GTK+
Знакомство с GNOME
Установка библиотек разработки GNOME/GTK+
События, сигналы и обратные вызовы
Виджеты упаковочных контейнеров
Виджеты GTK+
GtkWindow
GtkEntry
GtkSpinButton
GtkButton
GtkTreeView
Виджеты GNOME
Меню GNOME
Диалоговые окна
GtkDialog
Модальное диалоговое окно
Немодальные диалоговые окна
GtkMessageDialog
Приложение для работы с базой данных компакт-дисков
Резюме Глава 17. Программирование в KDE с помощью Qt
Введение в KDE и Qt
Установка Qt
Сигналы и слоты
Виджеты Qt
QLineEdit
Кнопки Qt
QComboBox
QListView
Диалоговые окна
QDialog
QMessageBox
QInputDialog
Применение qmake для упрощения написания make-файлов
Создание меню и панелей инструментов с помощью KDE
Приложение для работы с базой данных компакт-дисков с использованием KDE/Qt
MainWindow
AddCdDialog
LogonDialog
main.cpp
Резюме Глава 18. Стандарты Linux
Язык программирования C
Краткий урок истории
Коллекция компиляторов GNU
Опции gcc
Интерфейсы и Linux Standards Base
Стандартные библиотеки LSB
Применение стандарта LSB к библиотекам
Инициализация системы LSB
Стандарт устройства файловой системы
Что еще почитать о стандартах? 875
Резюме
Предметный указатель
XIV Оглавление Оглавление XIII
В книге детально рассмотрены основные подсистемы и функции ядер Linux серии 2.6, включая особенности построения, реализации и соответствующие программные интерфейсы. Рассмотренные вопросы включают: планирование и выполнение процессов, управление временем и таймеры ядра, интерфейс системных вызовов, особенности адресации и управления памятью, страничный кэш, подсистему VFS, механизмы синхронизации, проблемы переносимости и особенности отладки.
В книге Разработка Linux-приложений. Колисниченко рассмотрены основные аспекты программирования в Linux: от программирования на языках командных оболочек bash и tcsh до создания приложений с графическим интерфейсом с использованием библиотек Tk, glib, GTK+ и средства dialog