Разработка Linux-приложений - Рассмотрены основные аспекты программирования в Linux: от программирования на языках командных оболочек bash и tcsh до создания приложений с графическим интерфейсом с использованием библиотек Tk, glib, GTK+ и средства dialog, Подробно дано программирование на C/C++ в Linux: использование компилятора gcc, ввод/вывод в Linux, создание многопоточных приложений, сетевых приложений архитектуры клиент/сервер, а также разработка модулей ядра для современной линейки ядер. Описан популярный среди разработчиков утилит язык TCL. Особое внимание уделено отладке и оптимизации программ, рассмотрены отладчик gdb и профайлер gprof. Для программистов.
Название: Разработка Linux-приложений Автор: Колисниченко Д. Н. Издательство: БХВ-Петербург Год: 2012 Страниц: 432 Формат: PDF Размер: 13,98 МБ ISBN: 978-5-9775-0747-9 Качество: отличное Серия: Профессиональное программирование Язык: русский
Содержание:
Введение Часть I. Программирование на языке командной оболочки Глава 1. Командные интерпретаторы 1.1. Файл /etc/shells 1.2. Оболочка sh 1.3. Оболочка csh 1.4. Оболочка ksh 1.5. Оболочка bash 1.6. Оболочка zsh 1.7. Оболочка tcsh 1.8. Оболочка ash 1.9. Выбор оболочки Глава 2. Командный интерпретатор bash 2.1. Настройка bash 2.2. Автоматизация задач с помощью bash 2.3. Привет, мир! 2.4. Использование переменных в собственных сценариях 2.5. Передача параметров сценарию 2.6. Массивы и bash 2.7. Циклы 2.8. Условные операторы 2.9. Функции 2.10. Примеры сценариев 2.10.1. Сценарий мониторинга журнала 2.10.2. Переименование файлов 2.10.3. Преобразование систем счисления Глава 3. Создание сценариев на tcsh 3.1. Использование tcsh 3.2. Конфигурационные файлы tcsh 3.3. Создание сценариев на tcsh 3.3.1. Переменные, массивы и выражения 3.3.2. Чтение ввода пользователя 3.3.3. Переменные оболочки tcsh 3.3.4. Управляющие структуры Условный оператор if Условный оператор if.. then.. else Оператор foreach Оператор while Оператор switch 3.3.5. Встроенные команды tcsh Глава 4. Пакет dialog: псевдографический интерфейс пользователя 4.1. Необходимость в графическом интерфейсе 4.2. Простейшее диалоговое окно 4.3. Информационное окно 4.4. Ввод текста 4.5. Создание меню 4.6. Проблема выбора: зависимые и независимые переключатели 4.7. Выбор даты и времени 4.8. Индикатор 4.9. Диалог выбора файла 4.10. Дополнительные возможности Глава 5. Компилятор gcc и вспомогательные программы 5.1. Выбор редактора 5.2. Компилятор gcc 5.2.1. Установка компилятора 5.2.2. Компиляция первой программы в Linux 5.2.3. Опции компилятора 5.3. Автоматическая сборка программ 5.3.1. Введение в автоматическую сборку 5.3.2. Синтаксис Makefile Часть II. Основы программирования на C в Linux Глава 6. Библиотеки. Автоматическая сборка библиотек 6.1. Динамические и статические библиотеки 6.2. Создание статической библиотеки 6.3. Создание динамической библиотеки Глава 7. Переменные окружения 7.1. Еще один способ передачи параметров 7.2. Что такое окружение? 7.3. Чтение переменных окружения в вашей программе 7.4. Модификация окружения Глава 8. Ввод/вывод в Linux 8.1. Понятие ввода/вывода. Перенаправление ввода/вывода в командной строке 8.2. Библиотечные функции C для организации ввода/вывода 8.3. Низкоуровневый ввод/вывод 8.3.1. Системные вызовы файлового ввода/вывода 8.3.2. Системный вызов creat() 8.3.3. Чтение файла: системные вызовы open() и read() 8.3.4. Системный вызов write() 8.3.5. Системный вызов lseek() Часть III. Системное программирование Глава 9. Концепция многозадачности 9.1. Основы многозадачности Linux 9.1.1. Иерархия процессов 9.1.2. Аварийное завершение процесса 9.1.3. Программа top: кто больше всех расходует процессорное время 9.1.4. Команды nice и renice: изменение приоритета процесса 9.2. Функция system() Глава 10. Системные вызовы для работы с процессами 10.1. Создание и запуск процессов 10.1.1. Модели описания состояний процессов 10.1.2. Особенности fork() 10.1.3. Семейство функций exec 10.2. Системный вызов wait(): ожидание завершения дочернего процесса 10.3. Обработка сигналов 10.4. Получение информации о процессе Глава 11. Многопоточные приложения 11.1. Введение в потоки 11.2. Функция pthread_create() 11.3. Передача аргументов потоковой функции 11.4. Правильное завершение потока: функция pthread_exit() 11.5. Избавляемся от бесконечного цикла: функция pthread_join() 11.6. Получение информации о потоке 11.7. Прерывание потока Глава 12. Взаимодействие процессов 12.1. Способы взаимодействия 12.2. Каналы 12.3. Именованные каналы типа FIFO 12.4. Очереди сообщений 12.4.1. Межпроцессное взаимодействие System V 12.4.2. Структуры ядра для работы с очередями 12.4.3. Создание очереди сообщений 12.4.4. Постановка и чтение сообщений 12.5. Семафоры 12.5.1. Введение в семафоры 12.5.2. Структуры ядра 12.5.3. Создание набора семафоров 12.5.4. Операции над семафорами 12.5.5. Управление семафором 12.6. Разделяемые сегменты памяти 12.6.1. Структуры ядра 12.6.2. Создание разделяемого сегмента памяти и привязка к нему 12.6.3. Демонстрационная программа Глава 13. Создание модуля ядра 13.1. Что такое модуль ядра 13.2. Команды lsmod, insmod, modprobe 13.3. Установка необходимых пакетов 13.4. Ваш первый модуль 13.5. Компиляция модуля 13.6. Тестируем наш модуль 13.7. Сборка сложных модулей 13.8. Настоящее программирование ядра 13.8.1. Отличие обычных программ от модулей ядра 13.8.2. Пространства, пространства и еще раз пространства 13.8.3. Драйверы устройств и ядро 13.9. Символьные устройства 13.9.1. Возможные операции 13.9.2. Регистрация устройства 13.9.3. Драйвер абстрактного символьного устройства 13.10. Создание файла в /proc 13.11. Полезный пример: клавиатурный шпион Часть IV. Файловая система Linux Глава 14. Введение в файловую систему 14.1. Родные файловые системы Linux 14.2. Особенности файловой системы Linux 14.2.1. Имена файлов в Linux 14.2.2. Файлы и устройства 14.2.3. Корневая файловая система и монтирование 14.2.4. Стандартные каталоги Linux 14.3. Внутреннее строение файловой системы 14.4. Монтирование файловых систем 14.4.1. Команды mount и umount 14.4.2. Файлы устройств и монтирование Жесткие диски Приводы оптических дисков Дискеты Флешки и USB-диски 14.4.3. Опции монтирования файловых систем 14.4.4. Монтирование разделов при загрузке 14.4.5. Подробно о UUID и файле /etc/fstab 14.4.6. Системный вызов mount() Глава 15. Операции над каталогами 15.1. Команды для работы с каталогами 15.2. Функции для работы с каталогами 15.2.1. Изменение текущего каталога 15.2.2. Открываем, читаем и закрываем каталог 15.2.3. Получение информации о файлах 15.2.4. Создание и удаление каталога Глава 16. Операции с файлами 16.1. Команды для работы с файлами 16.2. Системные вызовы для работы с файлами 16.2.1. Переименование файла: rename() 16.2.2. Удаление файла и каталогов: unlink() и rmdir() 16.2.3. Системный вызов umask() 16.2.4. Работа со ссылками Глава 17. Получение информации о файловой системе 17.1. Список смонтированных файловых систем 17.2. Функции basename() и getcwd() Глава 18. Права доступа к файлам и каталогам 18.1. Изменение прав доступа. Системный вызов chmod() 18.2. Смена владельца файла. Системный вызов chown() Глава 19. Псевдофайловые системы 19.1. Что такое псевдофайловая система 19.2. Виртуальная файловая система sysfs 19.3. Виртуальная файловая система /proc 19.3.1. Информационные файлы 19.3.2. Файлы, позволяющие изменять параметры ядра 19.3.3. Файлы, изменяющие параметры сети 19.3.4. Файлы, изменяющие параметры виртуальной памяти 19.3.5. Файлы, позволяющие изменить параметры файловых систем 19.3.6. Как сохранить изменения Часть V. Сетевое программирование Глава 20. Введение в TCP/IP 20.1. Модель OSI 20.2. Что такое протокол 20.3. Адресация компьютеров Глава 21. Программирование сокетов: теория 21.1. Что такое сокет 21.2. Создание и связывание сокета 21.3. Установление связи с удаленным компьютером 21.4. Передача данных 21.5. Завершение сеанса связи Глава 22. Программирование сокетов: практика 22.1. Создание приложения клиент/сервер 22.1.1. Программа-сервер 22.1.2. Программа-клиент 22.2. Параметры сокета 22.3. Сигналы, связанные с сокетами 22.4. Неблокирующие операции Часть VI. Создание графического интерфейса средствами TCL/Tk Глава 23. Введение в TCL/Tk 23.1. Знакомство с TCL 23.2. Установка TCL/Tk 23.3. Первая программа Глава 24. Синтаксис TCL 24.1. Знакомство с синтаксисом TCL 24.1.1. Формат TCL-сценария 24.1.2. Команды puts и format: вывод и форматирование строки 24.1.3. Группировка аргументов 24.1.4. Переменные 24.1.5. Процедуры 24.1.6. Получаем ввод пользователя 24.1.7. Математические операции 24.1.8. Условная команда if 24.1.9. Команда while 24.1.10. Команда for 24.2. Строки 24.2.1. Команда string 24.2.2. Сравнение строк 24.2.3. Получаем информацию о строках 24.2.4. Модификация строк 24.2.5. Конкатенация строк 24.3. Списки 24.3.1. Команда list: создание списка 24.3.2. Команда concat: слияние списков 24.3.3. Команда lappend: добавление элемента в конец списка 24.3.4. Доступ к элементам списка 24.3.5. Вставка новых элементов 24.3.6. Замена и удаление элементов списка 24.3.7. Поиск элемента 24.3.8. Сортировка списка 24.3.9. Преобразование строки в список и обратно 24.3.10. Цикл foreach 24.4. Массивы 24.4.1. Отличие массивов от списков 24.4.2. Команда array: обработка массивов 24.5. Ошибки начинающих TCL-программистов Глава 25. Работа с файлами 25.1. Открываем и закрываем файлы 25.2. Чтение файла 25.3. Запись файлов 25.4. Произвольный доступ к файлу Глава 26. Понятие о виджетах 26.1. Tk-программирование 26.2. Компоненты Tk-приложения и имена виджетов Глава 27. Основные элементы графического интерфейса 27.1. Команда pack 27.2. Команда button 27.3. Команда checkbutton 27.4. Зависимые переключатели 27.5. Создание меню 27.6. Поля ввода 27.7. Списки и домашнее задание 27.8. Программирование событий. Команда bind Глава 28. Многооконный интерфейс 28.1. Менеджер геометрии grid 28.1.1. Относительное размещение 28.1.2. Абсолютное размещение 28.1.3. Объединение ячеек 28.2. Фреймы 28.3. Создание окон 28.4. Сообщения 28.5. Диалоги открытия и сохранения файла Глава 29. Практический пример 29.1. Постановка задачи 29.2. Создание оболочки 29.3. Запуск оболочки 29.4. Последние штрихи Часть VII. Библиотека GTK+ Глава 30. Знакомство с библиотекой 30.1. Введение в GTK+ 30.2. Библиотека GLib 30.2.1. Типы данных 30.2.2. Строки в GLib 30.2.3. Функции распределения памяти 30.2.4. Списки 30.2.5. Использование таймеров Глава 31. Первая программа на GTK+ 31.1. Виджеты, контейнеры, сигналы и события 31.2. Создание первой программы 31.3. Компиляция программы 31.4. Совершенствование программы. Обработчик сигнала Глава 32. Виджеты 32.1. Подробно о сигналах 32.1.1. Сигналы и события 32.1.2. Виджет EventBox 32.2. Русский текст и GTK 32.3. Состояния виджета 32.4. Контейнеры, поля ввода и кнопки 32.5. Зависимые и независимые переключатели 32.6. Список CList 32.7. Диалог выбора файлов 32.8. Визуальная разработка интерфейса пользователя Глава 33. Редактор интерфейсов Glade 33.1. Быстрая разработка приложений 33.2. Установка Glade 33.3. Использование Glade 33.4. Создание программы 33.5. Компиляция программы 33.6. Рекомендуемая литература Часть VIII. Отладка и оптимизация программы Глава 34. Отладка программ. Трассировка системных вызовов 34.1. Для чего нужна отладка программ 34.2. Введение в отладчик gdb 34.3. Пример использования gdb 34.4. Трассировка системных вызовов Глава 35. Оптимизация программы 35.1. Назначение и основные опции профайлера gprof 35.2. Практическое использование профайлера Заключение Приложение. Ядро Linux П1. Установка исходных кодов ядра П2. Настройка ядра П3. Компиляция ядра Предметный указатель