Разработка 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()
  • 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. Получение информации о процессе
  • 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. Неблокирующие операции
  • 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-программистов
  • 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. Диалоги открытия и сохранения файла
  • 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. Визуальная разработка интерфейса пользователя
  • 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 совершенно бесплатно.
Разработка Linux-приложений
Рейтинг книги:
3 голоса
1017

Поиск книг:




При поиске учитываются только слова, длина которых больше 3-х символов.

Статистика: