API определен в заголовочном файле sysroot-*-kos/include/kos/log.h из состава KasperskyOS SDK.
API позволяет осуществлять форматированный вывод аналогично функциям семейства printf, но асинхронно, то есть выполняя неблокирующие вызовы. Это дает возможность, например, осуществлять форматированный вывод в обработчиках прерываний, где нельзя выполнять вызовы, которые являются блокирующими и, как следствие, имеют неопределенную длительность.
Сведения о функциях API приведены в таблице ниже.
Использование API
Типовой сценарий использования API включает следующие шаги:
Чтобы выполнить этот шаг, нужно вызвать функцию KosLogCreateEx() или KosLogCreate(). Журнал представляет собой объект, который содержит очередь форматированных строк, организованную по принципу FIFO (англ. First In, First Out). При создании журнала автоматически создается поток исполнения, который в цикле извлекает первую строку из очереди в этом журнале и выполняет одно из следующих действий:
Этот вариант применяется, если журнал был создан вызовом функции KosLogCreateEx() со значением RTL_NULL в параметре logFunc либо вызовом функции KosLogCreate().
logFunc функции KosLogCreateEx().Callback-функция получает указатель на форматированную строку и размер этой строки (без учета терминирующего нуля, в байтах) через свои параметры buf и len соответственно. Эта callback-функция может, например, записывать форматированную строку в буфер, вместо того чтобы помещать в диагностический вывод.
При использовании функции KosLogCreate() максимальное число форматированных строк в журнале и их максимальный размер (с учетом терминирующего нуля, в байтах) определяются константами KOS_LOG_QUEUE_CAPACITY_DEFAULT и KOS_LOG_MSG_SIZE_DEFAULT соответственно. Функция KosLogCreateEx() позволяет задать эти параметры журнала.
Чтобы выполнить вывод форматированной строки, нужно добавить эту строку в журнал вызовом функции KosLogVWrite() или KosLogWrite(). Функция KosLogWrite() опционально принимает последовательность параметров (...), значения которых нужно поместить в форматированную строку. Функция KosLogVWrite() принимает список значений для помещения в форматированную строку через параметр ap типа rtl_va_list, поэтому эту функцию нужно использовать совместно с макросами rtl_va_start() и rtl_va_end(), определенными в заголовочном файле sysroot-*-kos/include/rtl/stdarg.h из состава KasperskyOS SDK.
Если журнал полностью заполнен, то функции KosLogVWrite() и KosLogWrite() завершаются с ошибкой rcOutOfMemory. При этом поток исполнения, который извлекает форматированные строки из журнала, помещает в диагностический вывод или передает иным способом (в зависимости от реализации callback-функции, заданной через параметр logFunc функции KosLogCreateEx()) сообщение о потере данных.
Чтобы выполнить этот шаг, нужно вызвать функцию KosLogDestroy().
Перед удалением можно проверить, пуст ли журнал, вызовом функции KosLogIsEmpty().
Сведения о функциях API
Функции log.h
Функция |
Сведения о функции |
|---|---|
|
Назначение Создает журнал. Параметры
Возвращаемые значения В случае успеха возвращает |
|
Назначение Создает журнал с параметрами по умолчанию. Параметры
Возвращаемые значения В случае успеха возвращает |
|
Назначение Удаляет журнал. Параметры
Возвращаемые значения В случае успеха возвращает |
|
Назначение Добавляет форматированную строку в журнал. Параметры
Возвращаемые значения В случае успеха возвращает Дополнительные сведения Потокобезопасная функция. Неблокирующий вызов. |
|
Назначение Добавляет форматированную строку в журнал. Параметры
Возвращаемые значения В случае успеха возвращает Дополнительные сведения Потокобезопасная функция. Неблокирующий вызов. |
|
Назначение Проверяет, пуст ли журнал. Параметры
Возвращаемые значения В случае успешной проверки возвращает |