Разработка Linux-приложений
Денис Колисниченко
Рассмотрены основные аспекты программирования в Linux: от программирования на языках командных оболочек bash и tcsh до создания приложений с графическим интерфейсом с использованием библиотек Tk, glib, GTK+ и средства dialog. Подробно дано программирование на C/C++ в Linux: использование компилятора gcc, ввод/вывод в Linux, создание многопоточных приложений, сетевых приложений архитектуры клиент/сервер, а также разработка модулей ядра для современной линейки ядер. Описан популярный среди разработчиков утилит язык TCL. Особое внимание уделено отладке и оптимизации программ, рассмотрены отладчик gdb и профайлер gprof.
Издательство: БХВ-Петербург, 2012 г.
ISBN 978-5-9775-0747-9
Количество страниц: 432.
Содержание книги «Разработка Linux-приложений»:
- 11 Введение
- 13 ЧАСТЬ I. ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ КОМАНДНОЙ ОБОЛОЧКИ
- 14 Глава 1. Командные интерпретаторы
- 14 1.1. Файл /etc/shells
- 15 1.2. Оболочка sh
- 16 1.3. Оболочка csh
- 16 1.4. Оболочка ksh
- 17 1.5. Оболочка bash
- 17 1.6. Оболочка zsh
- 18 1.7. Оболочка tcsh
- 19 1.8. Оболочка ash
- 19 1.9. Выбор оболочки
- 20 Глава 2. Командный интерпретатор bash
- 20 2.1. Настройка bash
- 22 2.2. Автоматизация задач с помощью bash
- 23 2.3. Привет, мир!
- 23 2.4. Использование переменных в собственных сценариях
- 25 2.5. Передача параметров сценарию
- 25 2.6. Массивы и bash
- 26 2.7. Циклы
- 27 2.8. Условные операторы
- 28 2.9. Функции
- 28 2.10. Примеры сценариев
- 28 2.10.1. Сценарий мониторинга журнала
- 29 2.10.2. Переименование файлов
- 30 2.10.3. Преобразование систем счисления
- 31 Глава 3. Создание сценариев на tcsh
- 31 3.1. Использование tcsh
- 32 3.2. Конфигурационные файлы tcsh
- 33 3.3. Создание сценариев на tcsh
- 33 3.3.1. Переменные, массивы и выражения
- 36 3.3.2. Чтение ввода пользователя
- 36 3.3.3. Переменные оболочки tcsh
- 38 3.3.4. Управляющие структуры
- 38 Условный оператор if
- 39 Условный оператор if..then..else
- 40 Оператор foreach
- 41 Оператор while
- 41 Оператор switch
- 42 3.3.5. Встроенные команды tcsh
- 45 Глава 4. Пакет dialog: псевдографический интерфейс пользователя
- 45 4.1. Необходимость в графическом интерфейсе
- 46 4.2. Простейшее диалоговое окно
- 47 4.3. Информационное окно
- 49 4.4. Ввод текста
- 51 4.5. Создание меню
- 52 4.6. Проблема выбора: зависимые и независимые переключатели
- 54 4.7. Выбор даты и времени
- 55 4.8. Индикатор
- 56 4.9. Диалог выбора файла
- 57 4.10. Дополнительные возможности
- 60 Глава 5. Компилятор gcc и вспомогательные программы
- 60 5.1. Выбор редактора
- 61 5.2. Компилятор gcc
- 61 5.2.1. Установка компилятора
- 62 5.2.2. Компиляция первой программы в Linux
- 63 5.2.3. Опции компилятора
- 65 5.3. Автоматическая сборка программ
- 65 5.3.1. Введение в автоматическую сборку
- 66 5.3.2. Синтаксис Makefile
- 59 ЧАСТЬ II. ОСНОВЫ ПРОГРАММИРОВАНИЯ НА C В LINUX
- 71 Глава 6. Библиотеки. Автоматическая сборка библиотек
- 71 6.1. Динамические и статические библиотеки
- 73 6.2. Создание статической библиотеки
- 75 6.3. Создание динамической библиотеки
- 78 Глава 7. Переменные окружения
- 78 7.1. Еще один способ передачи параметров
- 78 7.2. Что такое окружение?
- 80 7.3. Чтение переменных окружения в вашей программе
- 81 7.4. Модификация окружения
- 83 Глава 8. Ввод/вывод в Linux
- 83 8.1. Понятие ввода/вывода. Перенаправление ввода/вывода в командной строке
- 85 8.2. Библиотечные функции C для организации ввода/вывода
- 89 8.3. Низкоуровневый ввод/вывод
- 89 8.3.1. Системные вызовы файлового ввода/вывода
- 92 8.3.2. Системный вызов creat()
- 93 8.3.3. Чтение файла: системные вызовы open() и read()
- 95 8.3.4. Системный вызов write()
- 97 8.3.5. Системный вызов lseek()
- 99 ЧАСТЬ III. СИСТЕМНОЕ ПРОГРАММИРОВАНИЕ
- 100 Глава 9. Концепция многозадачности
- 100 9.1. Основы многозадачности Linux
- 100 9.1.1. Иерархия процессов
- 102 9.1.2. Аварийное завершение процесса
- 105 9.1.3. Программа top: кто больше всех расходует процессорное время
- 107 9.1.4. Команды nice и renice: изменение приоритета процесса
- 107 9.2. Функция system()
- 100 9.1. Основы многозадачности Linux
- 109 Глава 10. Системные вызовы для работы с процессами
- 109 10.1. Создание и запуск процессов
- 109 10.1.1. Модели описания состояний процессов
- 111 10.1.2. Особенности fork()
- 113 10.1.3. Семейство функций exec
- 117 10.2. Системный вызов wait(): ожидание завершения дочернего процесса
- 119 10.3. Обработка сигналов
- 120 10.4. Получение информации о процессе
- 109 10.1. Создание и запуск процессов
- 122 Глава 11. Многопоточные приложения
- 122 11.1. Введение в потоки
- 123 11.2. Функция pthread_create()
- 126 11.3. Передача аргументов потоковой функции
- 128 11.4. Правильное завершение потока: функция pthread_exit()
- 129 11.5. Избавляемся от бесконечного цикла: функция pthread_join()
- 132 11.6. Получение информации о потоке
- 132 11.7. Прерывание потока
- 133 Глава 12. Взаимодействие процессов
- 133 12.1. Способы взаимодействия
- 133 12.2. Каналы
- 137 12.3. Именованные каналы типа FIFO
- 140 12.4. Очереди сообщений
- 140 12.4.1. Межпроцессное взаимодействие System V
- 141 12.4.2. Структуры ядра для работы с очередями
- 143 12.4.3. Создание очереди сообщений
- 145 12.4.4. Постановка и чтение сообщений
- 149 12.5. Семафоры
- 149 12.5.1. Введение в семафоры
- 149 12.5.2. Структуры ядра
- 150 12.5.3. Создание набора семафоров
- 151 12.5.4. Операции над семафорами
- 152 12.5.5. Управление семафором
- 154 12.6. Разделяемые сегменты памяти
- 154 12.6.1. Структуры ядра
- 154 12.6.2. Создание разделяемого сегмента памяти и привязка к нему
- 156 12.6.3. Демонстрационная программа
- 158 Глава 13. Создание модуля ядра
- 158 13.1. Что такое модуль ядра
- 159 13.2. Команды lsmod, insmod, modprobe
- 161 13.3. Установка необходимых пакетов
- 162 13.4. Ваш первый модуль
- 165 13.5. Компиляция модуля
- 168 13.6. Тестируем наш модуль
- 172 13.7. Сборка сложных модулей
- 172 13.8. Настоящее программирование ядра
- 172 13.8.1. Отличие обычных программ от модулей ядра
- 173 13.8.2. Пространства, пространства и еще раз пространства
- 174 13.8.3. Драйверы устройств и ядро
- 175 13.9. Символьные устройства
- 175 13.9.1. Возможные операции
- 177 13.9.2. Регистрация устройства
- 177 13.9.3. Драйвер абстрактного символьного устройства
- 183 13.10. Создание файла в /proc
- 187 13.11. Полезный пример: клавиатурный шпион
- 193 ЧАСТЬ IV. ФАЙЛОВАЯ СИСТЕМА LINUX
- 194 Глава 14. Введение в файловую систему
- 194 14.1. Родные файловые системы Linux
- 195 14.2. Особенности файловой системы Linux
- 195 14.2.1. Имена файлов в Linux
- 196 14.2.2. Файлы и устройства
- 197 14.2.3. Корневая файловая система и монтирование
- 197 14.2.4. Стандартные каталоги Linux
- 198 14.3. Внутреннее строение файловой системы
- 201 14.4. Монтирование файловых систем
- 201 14.4.1. Команды mount и umount
- 202 14.4.2. Файлы устройств и монтирование
- 202 Жесткие диски
- 204 Приводы оптических дисков
- 204 Дискеты
- 204 Флешки и USB-диски
- 205 14.4.3. Опции монтирования файловых систем
- 206 14.4.4. Монтирование разделов при загрузке
- 208 14.4.5. Подробно о UUID и файле /etc/fstab
- 210 14.4.6. Системный вызов mount()
- 213 Глава 15. Операции над каталогами
- 213 15.1. Команды для работы с каталогами
- 215 15.2. Функции для работы с каталогами
- 215 15.2.1. Изменение текущего каталога
- 215 15.2.2. Открываем, читаем и закрываем каталог
- 217 15.2.3. Получение информации о файлах
- 219 15.2.4. Создание и удаление каталога
- 220 Глава 16. Операции с файлами
- 220 16.1. Команды для работы с файлами
- 223 16.2. Системные вызовы для работы с файлами
- 223 16.2.1. Переименование файла: rename()
- 223 16.2.2. Удаление файла и каталогов: unlink() и rmdir()
- 224 16.2.3. Системный вызов umask()
- 224 16.2.4. Работа со ссылками
- 226 Глава 17. Получение информации о файловой системе
- 226 17.1. Список смонтированных файловых систем
- 229 17.2. Функции basename() и getcwd()
- 230 Глава 18. Права доступа к файлам и каталогам
- 230 18.1. Изменение прав доступа. Системный вызов chmod()
- 233 18.2. Смена владельца файла. Системный вызов chown()
- 234 Глава 19. Псевдофайловые системы
- 234 19.1. Что такое псевдофайловая система
- 235 19.2. Виртуальная файловая система sysfs
- 235 19.3. Виртуальная файловая система /proc
- 236 19.3.1. Информационные файлы
- 236 19.3.2. Файлы, позволяющие изменять параметры ядра
- 237 19.3.3. Файлы, изменяющие параметры сети
- 238 19.3.4. Файлы, изменяющие параметры виртуальной памяти
- 238 19.3.5. Файлы, позволяющие изменить параметры файловых систем
- 238 19.3.6. Как сохранить изменения
- 241 ЧАСТЬ V. СЕТЕВОЕ ПРОГРАММИРОВАНИЕ
- 242 Глава 20. Введение в TCP/IP
- 242 20.1. Модель OSI
- 244 20.2. Что такое протокол
- 245 20.3. Адресация компьютеров
- 249 Глава 21. Программирование сокетов: теория
- 249 21.1. Что такое сокет
- 250 21.2. Создание и связывание сокета
- 252 21.3. Установление связи с удаленным компьютером
- 254 21.4. Передача данных
- 255 21.5. Завершение сеанса связи
- 256 Глава 22. Программирование сокетов: практика
- 256 22.1. Создание приложения клиент/сервер
- 256 22.1.1. Программа-сервер
- 259 22.1.2. Программа-клиент
- 260 22.2. Параметры сокета
- 263 22.3. Сигналы, связанные с сокетами
- 264 22.4. Неблокирующие операции
- 256 22.1. Создание приложения клиент/сервер
- 265 ЧАСТЬ VI. СОЗДАНИЕ ГРАФИЧЕСКОГО ИНТЕРФЕЙСА СРЕДСТВАМИ TCL/TK
- 266 Глава 23. Введение в TCL/Tk
- 266 23.1. Знакомство с TCL
- 266 23.2. Установка TCL/Tk
- 267 23.3. Первая программа
- 270 Глава 24. Синтаксис TCL
- 270 24.1. Знакомство с синтаксисом TCL
- 270 24.1.1. Формат TCL-сценария
- 271 24.1.2. Команды puts и format: вывод и форматирование строки
- 272 24.1.3. Группировка аргументов
- 272 24.1.4. Переменные
- 274 24.1.5. Процедуры
- 274 24.1.6. Получаем ввод пользователя
- 275 24.1.7. Математические операции
- 276 24.1.8. Условная команда if
- 277 24.1.9. Команда while
- 277 24.1.10. Команда for
- 277 24.2. Строки
- 277 24.2.1. Команда string
- 279 24.2.2. Сравнение строк
- 280 24.2.3. Получаем информацию о строках
- 282 24.2.4. Модификация строк
- 283 24.2.5. Конкатенация строк
- 283 24.3. Списки
- 283 24.3.1. Команда list: создание списка
- 284 24.3.2. Команда concat: слияние списков
- 284 24.3.3. Команда lappend: добавление элемента в конец списка
- 284 24.3.4. Доступ к элементам списка
- 285 24.3.5. Вставка новых элементов
- 285 24.3.6. Замена и удаление элементов списка
- 285 24.3.7. Поиск элемента
- 287 24.3.8. Сортировка списка
- 287 24.3.9. Преобразование строки в список и обратно
- 288 24.3.10. Цикл foreach
- 289 24.4. Массивы
- 289 24.4.1. Отличие массивов от списков
- 289 24.4.2. Команда array: обработка массивов
- 290 24.5. Ошибки начинающих TCL-программистов
- 270 24.1. Знакомство с синтаксисом TCL
- 292 Глава 25. Работа с файлами
- 292 25.1. Открываем и закрываем файлы
- 293 25.2. Чтение файла
- 295 25.3. Запись файлов
- 296 25.4. Произвольный доступ к файлу
- 297 Глава 26. Понятие о виджетах
- 297 26.1. Tk-программирование
- 300 26.2. Компоненты Tk-приложения и имена виджетов
- 302 Глава 27. Основные элементы графического интерфейса
- 302 27.1. Команда pack
- 304 27.2. Команда button
- 307 27.3. Команда checkbutton
- 311 27.4. Зависимые переключатели
- 313 27.5. Создание меню
- 315 27.6. Поля ввода
- 318 27.7. Списки и домашнее задание
- 319 27.8. Программирование событий. Команда bind
- 321 Глава 28. Многооконный интерфейс
- 321 28.1. Менеджер геометрии grid
- 321 28.1.1. Относительное размещение
- 323 28.1.2. Абсолютное размещение
- 325 28.1.3. Объединение ячеек
- 326 28.2. Фреймы
- 327 28.3. Создание окон
- 328 28.4. Сообщения
- 330 28.5. Диалоги открытия и сохранения файла
- 321 28.1. Менеджер геометрии grid
- 332 Глава 29. Практический пример
- 332 29.1. Постановка задачи
- 333 29.2. Создание оболочки
- 336 29.3. Запуск оболочки
- 336 29.4. Последние штрихи
- 337 ЧАСТЬ VII. БИБЛИОТЕКА GTK+
- 338 Глава 30. Знакомство с библиотекой
- 338 30.1. Введение в GTK+
- 339 30.2. Библиотека GLib
- 339 30.2.1. Типы данных
- 340 30.2.2. Строки в GLib
- 341 30.2.3. Функции распределения памяти
- 342 30.2.4. Списки
- 344 30.2.5. Использование таймеров
- 346 Глава 31. Первая программа на GTK+
- 346 31.1. Виджеты, контейнеры, сигналы и события
- 347 31.2. Создание первой программы
- 348 31.3. Компиляция программы
- 351 31.4. Совершенствование программы. Обработчик сигнала
- 354 Глава 32. Виджеты
- 354 32.1. Подробно о сигналах
- 354 32.1.1. Сигналы и события
- 356 32.1.2. Виджет EventBox
- 360 32.2. Русский текст и GTK
- 361 32.3. Состояния виджета
- 362 32.4. Контейнеры, поля ввода и кнопки
- 370 32.5. Зависимые и независимые переключатели
- 375 32.6. Список CList
- 379 32.7. Диалог выбора файлов
- 381 32.8. Визуальная разработка интерфейса пользователя
- 354 32.1. Подробно о сигналах
- 382 Глава 33. Редактор интерфейсов Glade
- 382 33.1. Быстрая разработка приложений
- 383 33.2. Установка Glade
- 384 33.3. Использование Glade
- 388 33.4. Создание программы
- 390 33.5. Компиляция программы
- 390 33.6. Рекомендуемая литература
- 393 ЧАСТЬ VIII. ОТЛАДКА И ОПТИМИЗАЦИЯ ПРОГРАММЫ
- 394 Глава 34. Отладка программ. Трассировка системных вызовов
- 394 34.1. Для чего нужна отладка программ
- 396 34.2. Введение в отладчик gdb
- 399 34.3. Пример использования gdb
- 404 34.4. Трассировка системных вызовов
- 407 Глава 35. Оптимизация программы
- 407 35.1. Назначение и основные опции профайлера gprof
- 408 35.2. Практическое использование профайлера
- 413 Заключение
- 415 Приложение. Ядро Linux
- 415 П1. Установка исходных кодов ядра
- 417 П2. Настройка ядра
- 419 П3. Компиляция ядра
- 423 Предметный указатель
Инструкция как скачать книгу Денис Колисниченко: Разработка Linux-приложений в форматах DjVu, PDF, DOC или fb2 совершенно бесплатно.
Рейтинг книги:
3 голоса
1017