Создаем консольное приложение
21.1. Компилятор gcc
В 8 главе вы познакомились с языком командного интерпретатора и убедились, что на нем можно писать полезные сценарии. Но если вы раньше программировали под Windows, то интерпретатора вам маловато будет — понадобятся более мощные средства разработки. Разумеется, они в ОС Linux есть.
Основным C-компилятором в Linux служит gcc (GNU С Compiler). Если вы не установили средства разработки при установке дистрибутива, самое время сделать это сейчас. Запустите менеджер пакетов (рис. 21.1) и установите следующие пакеты:
♦gcc — сам компилятор gcc;
♦gcc-c++ — поддержка С++;
♦gcc-doc — документация по gcc (очень рекомендую установить);
♦compat-gcc — пакет, содержащий средства gcc для обратной совместимости. Данный пакет вам нужен, если вы планируете писать программы для более старых систем, чем ваша;
♦compat-gcc-c++ — то же, что и compat-gcc, только с поддержкой С++;
♦compat-cpp — препроцессор cpp для обратной совместимости;
♦binutils — набор вспомогательных утилит, о которых мы поговорим в последнем пункте этой главы;
♦glibc-devel — содержит библиотеки для разработки C-программ;
♦libbfd — библиотека дескриптора двоичного файла (Binary File Descriptor library);
♦libstdc++-devel — заголовочные файлы и библиотеки для программирования на С++;
♦make — утилита, упрощающая процесс сборки больших проектов.
Рис. 21.1. Менеджер пакетов Fedora Core — system-config-packages
21.1.1. Вызов gcc
Формат вызова компилятора такой:
gcc [опции] helloworld.с
Вы написали свою программу на С++? Нет проблем: компиляторы С и С++ являются интегрированными. Чтобы сообщить компилятору, на каком языке вы писали свою программу, нужно указать определенную опцию при вызове компилятора. Но можно поступить проще: по умолчанию компилятор считает, что файлы с расширением .с написаны на языке С, файлы с одним из расширений .C, .cc, .cXX — на языке С++, а файлы с расширением .s — на языке ассемблера.
Как правило, перед компиляцией вызывается программа cpp — препроцессор языка С. Препроцессор создаст файл с расширением .i, если ваша программа написана на языке С. и файл с расширением .ii, если ваша программа написана на С++. Если ваша программа уже прошла препроцессорную подготовку, вы можете передать компилятору gcc файл с расширением .i или .ii и gcc уже не будет вызывать препроцессор для подготовки исходного текста. Как правило, программу cpp редко кто вызывает вручную.
Если не указывать никаких опций, то компилятор создаст в текущем каталоге файл a.out, содержащий исполняемый код. Для тех, кто изучал другой язык, я на всякий случай приведу текст первой программы на С (листинг 21.1).
Листинг 21.1. Файл helloworld.c
#include
main() {
printf("Hello World!\n");
}
А сейчас рассмотрим основные опции компилятора. Обо всех остальных опциях вы сможете узнать по команде
man gcc
.21.1.2. Общие опции
Из общих опций наиболее интересны три: -х, -с и -о.
С помощью опции -х можно указать язык, на котором написан исходный код, например,
gcc -х с helloworld.c
В качестве языка программы вы можете указать:
♦с, если ваша программа написана на С;
♦objective_c, если ваша программа написана на Objective С;
♦c-header, если ваша программа является заголовком С;
♦C++, если вы написали программу на С++;
♦assembler, если вы написали программу на ассемблере.
Существуют и другие варианты, но они не столь важны.
Опция -c используется, если вы хотите только откомпилировать вашу программу, но не вызвать компоновщик. В результате будет создан объектный файл с расширением
.о
.Опция -о позволяет указать имя результирующего файла. Это очень полезная опция, потому что имя
a.out
мало кого устраивает:gcc -о helloworld helloworld.c
Очень полезна опция -v, которая выводит различную информацию о стадиях компиляции. Кроме того, эта опция выводит версию компилятора.
21.1.3. Опции языка
Из всех опций языка мне пригодилась лишь опция ANSI, которая выключает все функции GNU С, несовместимые со стандартом ANSI. К таким функциям относятся asm, inline, typeof и другие.
21.1.4. Опции препроцессора
Эти опции задают режим предварительной обработки исходного кода (до собственно компиляции).
Очень важной является опция -include <файл>. Она позволяет «прогнать» через препроцессор сперва содержимое указанного файла, а только после этого файл, который передан препроцессору. В результате указанный файл будет откомпилирован раньше, чем все остальные.
Опция -nostdinc запрещает использование системного каталога, содержащего файлы заголовков. При ее включении компилятор будет искать заголовки в каталогах, указанных в опции -I и в текущем каталоге.
Опция -nostdinc++ запрещает использование стандартных файлов заголовков для языка С++.
21.1.5. Опции компоновщика
Опция компоновщика -l позволяет явно указать имя библиотеки, которая будет использоваться при сборке вашей программы. Например,
gcc -lmylibrary myfile.c
Компоновщик будет использовать файл
libmylibrary.a
, который он попытается найти в системных каталогах библиотек и каталогах, которые вы укажете с помощью опции -L.Опция -nostdlib запрещает использовать все системные библиотеки. При этом будут использованы библиотеки только из тех каталогов, которые вы укажете с помощью опции -L.
Опция -static означает, что будет использована статическая линковка.
21.1.6. Опции каталогов
Две важнейшие опции каталогов: -I и -L. Первая позволяет указать путь для поиска заголовков (файлов с расширением .h), а вторая — библиотек. Например, если вы хотите, чтобы компилятор использовал файлы заголовков, которые находятся в каталоге
/root/include
, тогда укажите опцию -I/root/include. Обратите внимание на отсутствие пробела между буквой I и первым символом пути.Если вы укажете опцию -I-, то в каталогах, которые вы укажете в объявленной до этого опции -I, будет производиться поиск только пользовательских заголовков, то есть заголовков, указанных в директиве #include "файл". Пути для поиска системных заголовков, которые указываются директивой #include <файл>, останутся неизменными.
21.1.7. Опции отладки
Если вы хотите использовать отладчик, например gdb, для отладки своей программы, укажите опцию -g при вызове компилятора. Эта опция помещает в откомпилированный файл отладочную информацию, вследствие чего существенно увеличивается объем файла. Поэтому никогда не используйте эту опцию для окончательной версии продукта.
21.1.8. Опции оптимизации
Компилятор gcc позволяет оптимизировать код вашей программы. Другими словами, gcc сделает все для того, чтобы ваша программа была как можно меньше по размеру и как можно быстрее запускалась. Для включения режима оптимизации используйте опцию -O1. Вы можете поэкспериментировать с опциями -O2 и -O3, которые еще больше пытаются оптимизировать вашу программу, однако не перестарайтесь. Если ваша программа после такой оптимизации работает еще медленнее, чем до нее, или же некорректно работает, используйте опцию -O0 для отключения оптимизации.
Обо всех остальных опциях вы сможете прочитать в справочной системе.
21.2. Сборочная утилита make
Если вы уже собирали прикладную программу из исходных кодов, то обратили внимание на стандартную последовательность команд:
make; make install
.Без утилиты make не обходится создание ни одного серьезного проекта. Эта утилита управляет сборкой большого проекта, состоящего из десятков и сотен файлов. Программа make может работать не только с компилятором gcc, но и с любым компилятором для любого языка программирования, способным запускаться из командной строки.
Директивы утилиты make служат для определения зависимостей между файлами проекта и находятся в файле по имени Makefile, расположенном в каталоге сборки.
Разберемся, как пишутся make-файлы. Общий формат make-файла выглядит так:
цель1: список_необходимых_файлов
последовательность_команд
...
цельN: список_необходимых_файлов
последовательностъ_команд
Цель — это метка для некоторой последовательности команд (например, install) или результирующий файл, который нужно «построить» — скомпилировать или скомпоновать.
Цели должны отделяться друг от друга хотя бы одной пустой строкой. Список необходимых файлов — это перечень файлов или других целей, которые нужны для достижения данной цели; он может быть и пустым.
Оглавление
-
Введение
-
Об этой книге
-
Почему Linux?
-
История Linux
-
***
-
Происхождение Linux
-
***
-
***
-
Выбор дистрибутива
-
***
-
***
-
Разное
-
Глава 1 Установка операционной системы
-
1.1. Подготовка жесткого диска
-
1.1.1. Рекомендуемая схема разбиения диска
-
1.1.2. Имена разделов в ОС Linux
-
1.1.3. Разделы и точки монтирования
-
1.2. Загрузка программы установки
-
1.2.1. С использованием загрузочного компакт-диска
-
1.2.2. С использованием загрузочной дискеты
-
1.2.3. С использованием жесткого диска
-
1.2.4. Установка по сети
-
1.3. Установка Fedora Core
-
1.3.1. Описание дистрибутива
-
1.3.2. Особенности установки различных версий Fedora Core
-
1.3.3. Установка загрузчика
-
1.3.4. Продолжение установки
-
1.4. Особенности установки Mandrake 10.0
-
1.5. Проблемы при установке
-
1.5.1. Конфликты Fedora Core 1 и 2 с различным оборудованием
-
1.5.2. Fedora Core: не удается войти в систему как root в графическом режиме
-
1.5.3. Ошибка Signal 11
-
1.5.4. Не определяется мышь
-
1.5.5. Проблемы с переходом в графический режим
-
1.5.6. Проблемы при загрузке
-
1.5.7. Проблемы с графическим экраном загрузчика
-
1.5.8. Не загружается система X Window
-
1.5.9. Я забыл пароль пользователя root
-
1.5.10. У меня больше оперативной памяти!
-
1.5.11. Не работают принтер или звуковая плата
-
1.6. Как удалить Linux
-
1.7. Системы с двойной загрузкой
-
1.7.1. Установка Windows 9x и Linux
-
1.7.2. Установка Windows 9x, Windows NT/2000/XP и Linux
-
1.8. Первый запуск Linux
-
1.9. Стандартные сервисы Linux
-
1.10. Справочная система
-
Глава 2 Файловая система LINUX
-
2.1. Видимая сторона файловой системы
-
2.1.1. Имена файлов и каталогов
-
2.1.2. Назначение основных системных каталогов
-
2.1.3. Типы файлов
-
2.1.4. Команды работы с файлами и каталогами
-
2.2. Изнанка файловой системы
-
2.2.1. Файловая система ext2fs — предшественница ext3fs
-
2.2.2. Журналируемые файловые системы
-
2.3. Создание и монтирование файловых систем
-
Глава 3 Работаем в командной строке
-
3.1. Как устроен Linux: ядро и процессы
-
3.2. Жизнь процесса
-
3.3. Взаимодействие процессов
-
3.3.1. Конвейер (pipe)
-
3.3.2. Сигналы
-
3.4. Командная оболочка. Bash
-
3.4.1. Встроенные команды
-
3.4.2. История команд
-
3.4.3. Переменные
-
3.4.4. Подстановка переменных и команд
-
3.4.5. Шаблоны имен файлов
-
3.4.6. Потоки ввода-вывода
-
3.4.7. Группировка команд
-
3.4.8. Инициализационные файлы bash
-
Глава 4 Рабочее место пользователя
-
4.1. Графическая система X Window
-
4.2. Оконная среда KDE
-
4.2.1. Рабочий стол KDE
-
4.2.2. Запуск программ и переключение между ними
-
4.2.3. Файловый менеджер Konqueror
-
4.2.4. Центр управления KDE
-
4.2.5. Работа со съемными носителями в KDE
-
4.2.6. Добавление собственных команд в контекстное меню KDE
-
4.2.7. Новое в KDE 3.4
-
4.3. Оконная среда GNOME
-
4.3.1. Общее описание и методика работы
-
4.3.2. Добавление собственных команд в контекстное меню GNOME
-
4.3.3. Автоматическая смена обоев
-
4.4. Офисные пакеты
-
4.5. Издательские системы
-
4.6. Графика в Linux
-
4.6.1. Графические редакторы
-
4.6.2. Программы — просмотрщики изображений
-
4.6.3. Как сделать снимок экрана
-
4.7. Полезные трюки
-
Глава 5 Звук и видео в Linux
-
5.1. Почему воспроизведение аудио в Linux лучше, чем в Windows
-
5.2. Прослушивание музыки
-
5.2.1. Сравнение Xmms и NoAtun
-
5.3. «Ограбление» Audio-CD
-
5.4. Программы для просмотра видео
-
5.5. Воспроизведение неподдерживаемых форматов
-
Глава 6 Сеть и интернет
-
6.1. Основные сетевые понятия
-
6.1.1. Протокол и интерфейс
-
6.1.2. Уровни взаимодействия OSI
-
6.1.3. Протокол TCP/IP и IP-адресация
-
6.1.4. DNS — система доменных имен
-
6.1.5. Порты
-
6.1.6. Динамическое выделение адреса
-
6.2. Подключение к локальной сети
-
6.2.1. Настройка сети в Linux Mandrake
-
6.2.2. Настройка сети в Linux Red Hat
-
6.2.3. Настройка сети в Fedora Core
-
6.2.4. Проверка работы сетевого интерфейса
-
6.2.5. Настройка сети в старых дистрибутивах
-
6.3. Подключение к Windows-сети
-
6.4. Подключение к Интернету
-
6.4.1. Настройка модема
-
6.4.2. Подготовка к выходу в Интернет
-
6.4.3. Специальные возможности браузеров
-
6.4.4. Текстовые браузеры
-
6.4.5. Полезный трюк: Что делать, если браузер «подвисает» на какой-то странице
-
6.4.6. Набор программ для работы в Интернете
-
Глава 7 Основы администрирования системы
-
7.1. Что понимается под администрированием системы
-
7.2. Конфигураторы Linux
-
7.3. Пользователи и квоты
-
7.3.1. Учетные записи пользователей
-
7.3.2. Создание и удаление пользователей и групп
-
7.3.3. Квотирование
-
7.4. Подключение и конфигурирование аппаратных устройств
-
7.4.1. Ядро и поддержка устройств
-
7.4.2. Утилиты для работы с модулями
-
7.4.3. Kudzu — утилита для автоматического определения устройств
-
7.4.4. Настройка установленных устройств
-
7.5. Установка программного обеспечения
-
7.5.1. Установка из исходных текстов
-
7.5.2. Установка из бинарных пакетов
-
7.5.3. Установка из пакетов, содержащих исходный код
-
7.6. Клонирование и восстановление системы
-
Глава 8 Язык командного интерпретатора
-
8.1. Параметры
-
8.2. Подстановки
-
8.3. Массивы
-
8.4. Управляющие структуры
-
8.4.1. Условные операторы
-
8.5. Условная подстановка параметров
-
8.6. Функции
-
8.7. Обработка сигналов и протоколирование
-
Глава 9 Управление процессами
-
9.1. Как загружается Linux
-
9.1.1. Начальная загрузка: LILO и GRUB
-
9.1.2. Продолжение загрузки.
-
9.2. Команды управления процессами
-
9.2.1. Иерархия процессов: ps и pstree
-
9.2.2. Информация о ресурсах системы: команды free, df, du
-
9.2.3. Процессы в реальном времени: команда top
-
9.2.4. Приоритет процесса: команды nice и renice
-
9.2.5. Фоновый режим: команды jobs, fg, bg
-
9.3. Протоколирование системы
-
9.3.1. Конфигурационный файл /etc/syslog.conf
-
9.3.2. Сетевое протоколирование
-
9.3.3. Протоколирование ядра. Демон klogd и команда dmesg
-
9.3.4. Что делать с протоколами дальше? Утилита logrotate
-
9.4. Выполнение заданий по расписанию
-
9.4.1. Запуск задания в назначенное время: команда at
-
9.4.2. Диспетчер расписаний — демон cron
-
Глава 10 Резервное копирование и восстановление данных
-
10.1. Восстановление удаленного файла
-
10.1.1. Midnight Commander
-
10.1.2. Утилита debugfs
-
10.2. Стратегия резервного копирования
-
10.3. Оборудование для резервного копирования
-
10.3.1. Стример
-
10.3.2. Магнитооптический диск
-
10.4. Программное обеспечение для резервного копирования
-
10.4.1. Простое резервное копирование по сети
-
10.4.2. Управление стримером
-
10.4.3. Команды dump и restore
-
10.4.4. Архиватор cpio
-
10.4.5. Программа AMANDA
-
10.5. Дублирование данных: введение в RAI D
-
10.6. Как найти, спрятать и безвозвратно уничтожить данные
-
Глава 11 Базовое конфигурирование сервера
-
11.1. Серверные технологии Linux
-
11.2. Организация и состав Linux-сервера
-
11.3. Суперсервер xinetd
-
11.3.1. Установка суперсервера xinetd
-
11.3.2. Настройка суперсервера xinetd
-
11.3.3. Запуск xinetd
-
11.3.3.1. Защита xinetd
-
11.3.3.2. Пример файла конфигурации /etc/xinetd
-
11.4. Удаленный доступ: ssh и telnet
-
11.4.1. Использование telnet
-
11.4.2. Настройка и использование SSH
-
Глава 12 Разделение ресурсов: NFS и SAMBA
-
12.1. NFS — сетевая файловая система
-
12.1.1. Клиент NFS: монтирование сетевого каталога
-
12.1.2. Настройка сервера NFS
-
12.2. Samba: Linux-сервер для Windows-клиентов
-
12.2.1. Samba на сервере
-
12.2.2. Настройка Samba
-
12.2.3. Практические примеры настройки
-
12.2.4. Доступ к принтеру Linux для Windows-машин
-
12.2.5. Доступ к Windows-принтеру с компьютера, работающего под Linux
-
12.2.6. Конфигуратор SWAT
-
12.2.7. Samba и безопасность
-
12.2.8. Оптимизация Samba
-
12.3. Совместное использование каталогов в Linux Mandrake
-
12.4. Программа LinNeighborhood — правильный выбор
-
Глава 13 DNS — служба имен
-
13.1. Введение в DNS
-
13.2. Настройка клиента DNS
-
13.3. Настройка сервера DNS
-
13.3.1. Обновление корневого кэша
-
13.4. Кэширующий сервер DNS
-
13.4.1. Настройка кэширования на DNS-сервере
-
13.4.2. Возможные проблемы и их решение
-
13.5. Вторичный сервер DNS
-
13.6. Просм отр DNS-зоны. Утилита nslookup
-
13.7. Оптимизация настроек сервера DNS
-
13.8. Защита сервера DNS
-
13.8.1. Настройка и запуск DNS-сервера в chroot-окружении
-
13.9. Использование подписей транзакций. Механизм TSIG
-
Глава 14 Почтовый сервер
-
14.1. Установка и настройка sendmail
-
14.1.1. Базовая настройка sendmail
-
14.1.2. Редактирование конфигурационных файлов
-
14.2. Аутентификация в sendmail
-
14.2.1. Установка и настройка SASL
-
14.2.2. Настройка sendmail+SASL
-
14.2.3. Настройка почтовых клиентов с использованием аутентификации
-
14.3. Агент доступа — fetchmail
-
14.4. Автоматическая сортировка входящей почты — программа procmail
-
14.5. Создание списка рассылки
-
14.6. Защита программы sendmail. Программа smrsh
-
Глава 15 Настройка сервера FTP
-
15.1. Сервер WU-FTPD
-
15.1.1. Настройка WU-FTPD. Конфигурационные файлы
-
15.2. Сервер ProFTP
-
15.2.1. Установка и запуск ProFTPD
-
15.2.2. Настройка ProFTPD. Файл /etc/proftpd.conf
-
15.2.3. Разграничение доступа к серверу ProFTP
-
15.3. Утилиты обслуживания FTP-сервера
-
15.4. Виртуальный узел FTP
-
15.5. Защита FTP
-
Глава 16 HTTP-сервер Apache
-
16.1. Установка Apache
-
16.2. Настройка Apache. Файлы конфигурации
-
16.3. Основные настройки. Файл httpd.conf (httpd2.conf)
-
16.3.1. Общие директивы
-
16.3.2. Директивы протоколирования
-
16.3.3. Директивы управления производительностью
-
16.3.4. Директивы обеспечения постоянного соединения с клиентом
-
16.3.5. Директивы создания виртуальных узлов
-
16.3.6. Директивы настройки отображения каталогов
-
16.3.7. Директивы обработки MIME-типов
-
16.3.8. Директивы для работы с многоязычными документами
-
16.3.9. Директивы перенаправления
-
16.3.10. Директивы обработки ошибок
-
16.3.11. Директивы управления доступом к отдельным каталогам
-
16.4. Файл ротации журналов /etc/logrotate.d/httpd
-
16.5. Системный файл конфигурации /etc/sysconfig/httpd
-
16.6. Сценарий запуска сервера Apache /etc/init.d/httpd
-
16.7. Графические конфигураторы Apache
-
16.8. Каталоги пользователей
-
16.9. Виртуальный HTTP-сервер
-
16.9.1. Виртуальные серверы с идентификацией по имени
-
16.9.2. Виртуальные серверы с идентификацией по IP-адресу
-
16.10. SSL и Apache
-
16.10.1. Установка SSL
-
16.10.2. Подключение SSL к Apache
-
16.10.3. Генерирование сертификатов
-
16.11. Пример файла httpd.conf
-
***
-
***
-
***
-
***
-
16.12. Перекодирование русскоязычных документов «на лету»
-
16.12.1. Russian Apache: установка, настройка, использование
-
16.12.2. Настройка перекодировки русскоязычных документов
-
16.13. Защита сервера Apache
-
16.14. Сервер kHTTPd — веб-сервер уровня ядра
-
16.14.1. Настройка kHTTPd
-
Глава 17 Установка и настройка MySQL. Связка Apache + PHP + MySQL
-
17.1. Установка MySQL
-
17.1.1. Назначение пароля суперпользователя
-
17.1.2. Автозапуск сервера MySQL
-
17.1.3. Пользователи сервера MySQL и их права
-
17.2. Клиентская часть MySQL
-
17.3. Установка PHP и настройка связки Apache+PHP+MySQL
-
17.3.1. Первый способ: из пакетов RPM
-
17.3.2. Тестируем созданную конфигурацию
-
17.3.3. Второй способ: из исходных текстов
-
17.4. Защита сервера MySQL
-
17.5. Введение в язык SQL
-
17.5.1. Общие понятия
-
17.5.2. Краткий практический курс SQL
-
Глава 18. Прокси-серверы SQUID и SOCKS
-
18.1. Что такое прокси-сервер?
-
18.2. Установка SQUID
-
18.3. Настройка SQUID
-
18.4. Запуск SQUID
-
18.5. Расширенные настройки SQUID. Конфигурационный файл squid.conf
-
18.5.1. Параметры сети
-
18.5.2. Параметры соседей
-
18.5.3. Управление кэшем
-
18.5.4. Протоколирование
-
18.5.5. Параметры внешних программ
-
18.5.6. Параметры администрирования
-
18.6. Списки ACL
-
18.6.1. Параметры доступа
-
18.7. Отказ от рекламы. Баннерный фильтр
-
18.8. Разделение канала с помощью SQUID
-
18.9. Настройка поддержки прокси у клиентов
-
18.10. Технология SOCKS5, или как использовать аську из локальной сети
-
18.10.1. Введение в SOCKS. Прокси-сервер SOCKS5
-
18.10.2. Настройка сервера SOCKS5
-
18.10.3. Запуск сервера socks5
-
18.10.4. Dante — еще один сервер SOCKS5
-
18.10.5. Настройка клиентов SOCKS5 (ICQ и licq)
-
Глава 19 Маршрутизация и межсетевые экраны
-
19.1. Введение в маршрутизацию
-
19.2. Программы маршрутизации в Linux
-
19.2.1. Демон routed
-
19.2.2. Демон gated — правильный выбор
-
19.3. Расширенные средства маршрутизации. Комплекс iproute2
-
19.3.1. Пакет iproute2
-
19.3.2. Утилита ip
-
19.3.3. Просмотр параметров сетевого устройства
-
19.3.4. Операции над адресами: команда ip address
-
19.3.5. Управление таблицей маршрутизации
-
19.3.6. Динамическая маршрутизация
-
19.3.7. Управление правилами маршрутизации
-
19.4. Что такое брандмауэр
-
19.5. Цепочки правил
-
19.6. IPTables — пакетный фильтр для ядер 2.4.x. и 2.6.x
-
19.6.1. Что изменилось в IPTables по сравнению с IPChains
-
19.6.2. Настройка ядра Linux для поддержки IPTables
-
19.6.3. Первичная настройка IPTables. Задание политики по умолчанию
-
19.6.4. Действия над цепочками
-
19.6.5. Правила фильтрации
-
19.6.6. Фильтрация по отдельным пользователям
-
Глава 20 Настройка ядра
-
20.1. Многообразие ядер Linux
-
20.2. Зачем настраивать ядро?
-
20.3. Динамические параметры ядра
-
20.4. Загрузочные параметры ядра
-
20.4.1. Параметры корневой файловой системы
-
20.4.2. Объем памяти
-
20.4.3. Управление RAMDISK
-
20.4.4. Управление планировщиком ввода/вывода
-
20.4.5. Другие параметры ядра
-
20.5. Компиляция ядра
-
20.5.1. Зачем обновлять ядро?
-
20.5.2. Конфигурирование ядра
-
20.5.2.1. Code maturity level options
-
20.5.2.2. General setup
-
20.5.2.3. Loadable module support
-
20.5.2.4. Processor type and features
-
20.5.2.5. Power Management Options
-
20.5.2.6. Bus Options
-
20.5.2.7. Executable file formats
-
20.5.2.8. Device drivers
-
20.5.2.9. Filesystems
-
20.5.2.10. Kernel hacking
-
20.5.2.11 .Cryptographic options
-
20.5.3.Сборка ядра
-
Глава 21 Создаем консольное приложение
-
21.1. Компилятор gcc
-
21.1.1. Вызов gcc
-
21.1.2. Общие опции
-
21.1.3. Опции языка
-
21.1.4. Опции препроцессора
-
21.1.5. Опции компоновщика
-
21.1.6. Опции каталогов
-
21.1.7. Опции отладки
-
21.1.8. Опции оптимизации
-
21.2. Сборочная утилита make
-
21.3. Пакет binutils и другие полезные программы
-
21.3.1. ansi2knr
-
21.3.2. as
-
21.3.3. bison
-
21.3.4. flex
-
21.3.5. gprof
-
21.3.6. strip
-
21.4. Пример программы на С
-
Глава 22 Отладка, трассировка и оптимизация программ
-
22.1. Ошибки и отладка
-
22.2. Отладчик gdb
-
22.3. Пример отладки программы
-
22.4. Трассировка системных вызовов
-
22.5. Оптимизация программ. Профайлер gprof
-
22.5.1. Использование профайлера
-
22.5.2. Как оптимизировать программу
-
Глава 23 Разработка графического приложения: библиотека GTK+
-
23.1. Введение в GTK+
-
23.2. Библиотека Glib
-
23.2.1. Стандартные типы данных библиотеки Glib
-
23.2.2. Функции для работы с памятью
-
23.2.3. Строки и Glib
-
23.2.4. Списки
-
23.2.5. Таймеры в Glib
-
23.3. Первая программа на GTK+
-
23.3.1. Виджиты
-
23.3.2. Окна
-
23.3.3. Изменение размеров окна
-
23.3.4. Обработка сигналов
-
23.3.5. Виджит событий — EventBox
-
23.4. Виджиты
-
23.4.1. Рождение, смерть и состояния виджита
-
23.4.2. Упаковка виджитов, поля ввода и кнопки
-
23.4.3. Переключатели
-
23.4.4. Список
-
23.4.7. Меню
-
23.4.8. Иерархия виджитов
-
Глава 24 Студия Glade
-
24.1. Что такое Glade?
-
24.2. Знакомство с Glade
-
24.3. Работа с проектом
-
24.4. Создание меню
-
24.5. Интересные виджиты
-
Глава 25 Пакет Dialog
-
25.1. Что такое Dialog?
-
25.2. Сообщения
-
25.3. Виджит Yes-no
-
25.4. Окно ввода текста
-
25.5. Зависимые и независимые переключатели
-
25.6. Организация меню
-
25.7. Календарь
-
25.8. Шкала прогресса
-
Глава 26 Взаимодействие процессов в Linux
-
26.1. Способы взаимодействия
-
26.2. Полудуплексные каналы
-
26.3. Каналы типа FIFO
-
26.4. Основные принципы System V IPC
-
26.5. Очереди сообщений
-
26.5.1. Основные структуры ядра для работы с очередями
-
26.5.2. Создание очереди сообщений
-
26.5.3. Постановка сообщения в очередь
-
26.5.4. Получение сообщений очереди
-
26.5.5. Проверка наличия сообщения в очереди
-
26.5.6. Тотальный контроль
-
26.6. Семафоры
-
26.6.1. Создание множества семафоров
-
26.6.2. Выполнение операций над семафорами
-
26.6.3. Контроль семафора
-
26.7. Разделяемые сегменты памяти
-
Глава 27 Создание сетевого приложения в Linux
-
27.1. Протокол TCP/IP
-
27.1.1. Многоуровневая архитектура стека TCP/IP
-
27.1.1.1. Уровень сетевого интерфейса
-
27.1.1.2. Межсетевой уровень
-
27.1.1.3. Транспортный (основной) уровень
-
27.1.1.4. Уровень приложений
-
27.1.2. Структура пакетов IP и TCP
-
27.2 Протокол ICMP
-
27.2.1. Для чего используется протокол ICMP
-
27.2.2. Структура ICMP-пакета
-
27.2.3. Тип и код ICMP-сообщения
-
27.2.4. Функции для работы с протоколом ICMP
-
27.2.4.1. Технические подробности
-
27.3. Программирование сокетов
-
27.3.1. Что такое сокет?
-
27.3.2. Создание и связывание сокета
-
27.3.3. Установление связи с удаленным компьютером
-
27.3.4. Функция gethostbyname()
-
27.3.5. Функции сетевого ввода/вывода
-
27.3.6. Завершение сеанса связи
-
27.3.7. Программа-сервер
-
27.3.8. Программа-клиент
-
27.3.9. Установка опций сокета
-
27.3.10. Сигналы и сокеты
-
27.3.11. Мультиплексирование
-
27.3.12. Неблокирующие операции
-
Глава 28 Программирование ядра
-
28.1. Каркас модуля
-
28.2. Компиляция модуля
-
28.3. Работа с устройствами
-
28.4. Операции над устройством. Поиск устройств
-
***
-
Приложение Таблицы соответствия Windows- и Linux-программ
-
***
-
***