Нейл Мэтью - Основы программирования в Linux
- Название:Основы программирования в Linux
- Автор:
- Жанр:
- Издательство:«БХВ-Петербург»
- Год:2009
- Город:Санкт-Петербург
- ISBN:978-5-9775-0289-4
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Нейл Мэтью - Основы программирования в Linux краткое содержание
В четвертом издании популярного руководства даны основы программирования в операционной системе Linux. Рассмотрены: использование библиотек C/C++ и стандартных средств разработки, организация системных вызовов, файловый ввод/вывод, взаимодействие процессов, программирование средствами командной оболочки, создание графических пользовательских интерфейсов с помощью инструментальных средств GTK+ или Qt, применение сокетов и др. Описана компиляция программ, их компоновка c библиотеками и работа с терминальным вводом/выводом. Даны приемы написания приложений в средах GNOME® и KDE®, хранения данных с использованием СУБД MySQL® и отладки программ. Книга хорошо структурирована, что делает обучение легким и быстрым.
Для начинающих Linux-программистов
Основы программирования в Linux - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
Типы программ (из файла syslog.h) включают константу LOG_USER
, применяемую для обозначения сообщения, пришедшего из приложения пользователя (по умолчанию), и константы LOG_LOCAL0
, LOG_LOCAL1
, ..., LOG_LOCAL7
, зарезервированные для локального администратора.
В табл. 4.6 перечислены степени важности сообщений в порядке убывания приоритета.
Таблица 4.6
Приоритет | Описание |
---|---|
LOG_EMERG |
Кризисная ситуация |
LOG_ALERT |
Проблема с высоким приоритетом, например, повреждение базы данных |
LOG_CRIT |
Критическая ошибка, например, повреждение оборудования |
LOG_ERR |
Ошибки |
LOG_WARNING |
Предупреждение |
LOG_NOTICE |
Особые обстоятельства, требующие повышенного внимания |
LOG_INFO |
Информационные сообщения |
LOG_DEBUG |
Отладочные сообщения |
В зависимости от настройки системы сообщения типа LOG_EMER
могут пересылаться всем пользователям системы, сообщения LOG_ALERT
могут отправляться по электронной почте администратору, сообщения LOG_DEBUG
могут игнорироваться, а сообщения других типов могут записываться в файл. Вы можете написать программу, которая применяет средство регистрации сообщений, просто вызывая функцию syslog
, когда вы хотите создать регистрируемое сообщение.
У сообщения, создаваемого syslog
, есть заголовок и тело сообщения. Заголовок создается из индикатора типа программы, формирующей сообщение, и даты и времени. Тело сообщения создается из параметра message
, передаваемого функции syslog
, который действует как строка format
функции printf
. Остальные аргументы syslog
используются в соответствии со спецификаторами преобразований в стиле функции printf
, заданными в строке message
. Дополнительно может применяться спецификатор %m
для включения строки сообщения об ошибке, ассоциированной с текущим значением переменной errno
. Эта возможность может оказаться полезной для регистрации сообщений об ошибках.
Выполните упражнение 4.13.
syslog
В этой программе осуществляется попытка открыть несуществующий файл.
#include
#include
#include
int main() {
FILE *f;
f = fopen("not_here", "r");
if (!f) syslog(LOG_ERR|LOG_USER, "oops - %m\n");
exit(0);
}
Когда вы откомпилируете и выполните программу syslog.с, то не увидите никакого вывода, но в конце файла /var/log/messages теперь содержится следующая строка:
Jun 9 09:24:50 suse103 syslog: oops — No such file or directory
Как это работает
В данной программе вы пытаетесь открыть файл, которого нет. Когда попытка заканчивается неудачно, вы вызываете функцию syslog
для записи случившегося в системный журнал.
Обратите внимание на то, что регистрируемое сообщение не указывает, какая программа вызвала средство регистрации; оно просто констатирует тот факт, что была вызвана функция syslog
с сообщением. Спецификатор преобразования %m
был заменен описанием ошибки, в данном случае сообщающим об отсутствии файла. Это гораздо полезнее, чем простой отчет, содержащий внутренний номер ошибки.
В файле syslog.h определены и другие функции, применяемые для изменения поведения средств ведения системных журналов.
К ним относятся следующие функции:
#include void closelog(void);
void openlog(const char *ident, int logopt, int facility);
int setlogmask(int maskpri);
Вы можете изменить способ представления ваших регистрируемых сообщений, вызвав функцию openlog
. Это позволит задать строку ident
, которая будет добавляться к вашим регистрируемым сообщениям. Вы можете применять ее для индикации программы, создавшей сообщение. Параметр facility
записывает текущий принятый по умолчанию тип программы, формирующей сообщение, который будет использоваться в последующих вызовах syslog
. По умолчанию устанавливается значение LOG_USER
. Параметр logopt
настраивает поведение будущих вызовов функции syslog
. Он представляет собой результат поразрядной операции OR
нулевого или большего числа параметров, приведенных в табл. 4.7.
Таблица 4.7
Параметр logopt |
Описание |
---|---|
LOG_PID |
Включает в сообщения идентификатор процесса, уникальный номер, выделяемый системой каждому процессу |
LOG_CONS |
Посылает сообщения на консоль, если они не могут быть записаны |
LOG_ODELAY |
Открывает средство регистрации сообщений при первом вызове функции syslog |
LOG_NDELAY |
Открывает средство регистрации сообщений немедленно, не дожидаясь первого регистрируемого сообщения |
Функция openlog
выделит и откроет дескриптор файла, который будет применяться для записи в программе ведения системного журнала. Вы сможете закрыть его, вызвав функцию closelog
. Имейте в виду, что вам не нужно вызывать функцию openlog
перед вызовом syslog
, потому что последняя при необходимости самостоятельно откроет средство ведения системного журнала.
Вы можете управлять приоритетом регистрируемых вами сообщений с помощью установки маски регистрации, используя функцию setlogmask
. Все будущие вызовы syslog
с разными приоритетами, не заданными в маске регистрации, будут отброшены, таким образом, вы сможете, например, использовать маску для отключения сообщений типа LOG_DEBUG
без необходимости изменять тело программы.
Вы можете создать маску для регистрируемых сообщений, используя значение LOG_MASK(priority)
, создающее маску только для одного приоритета, или значение LOG_UPTO(priority)
, создающее маску для всех приоритетов вплоть до заданного.
Выполните упражнение 4.14.
logmask
)В этом примере вы увидите logmask
в действии.
#include
#include
#include
#include
int main() {
int logmask;
openlog("logmask", LOG_PID|LOG_CONS, LOG_USER);
syslog(LOG_INFO, "informative message, pid = %d", getpid());
syslog(LOG_DEBUG, "debug message, should appear");
logmask = setlogmask(LOG_UPTO(LOG_NOTICE));
syslog(LOG_DEBUG, "debug message, should not appear");
exit(0);
}
Программа logmask.c ничего не выводит, но в типичной системе Linux вы увидите в файле /var/log/messages, ближе к концу, следующую строку:
Jun 9 09:28:52 suse103 logmask[19339] : informative message, pid = 19339
Файл, настроенный на получение регистрируемых сообщений об отладке (в зависимости от настройки регистрации, это чаще всего файл /var/log/debug или иногда файл /var/log/messages), должен содержать следующую строку:
Jun 9 09:28:52 susel03 logmask[19339]: debug message, should appear
Интервал:
Закладка: