Jump to content

принтк

printk — это функция C из интерфейса ядра Linux , которая печатает сообщения в журнал ядра. [1] Он принимает строковый параметр, называемый строкой формата , который определяет метод для преобразования произвольного числа параметров различных типов данных в строку. [1] Затем строка выводится в журнал ядра. [1]

Это обеспечивает printf-like абстракция и ее анализ строки формата и аргументов ведут себя аналогично printf. [1] Он действует как инструмент отладки для программистов ядра, которым нужна эта функция для регистрации сообщений ядра. [1]

The printk Прототип функции:

int printk(const char *fmt, ...);

Стандартная библиотека C и ее printf функции недоступны в режиме ядра, следовательно, необходимо printk. [2]

Отличия от printf

[ редактировать ]

Функция printk основан на printf, но не всегда может использоваться таким же образом, как printf используется. [1]

Уровни журнала

[ редактировать ]

printk позволяет вызывающему абоненту указать тип и важность отправляемого сообщения. [1] Этот спецификатор называется уровнем журнала. [1]

Уровень журнала определяет тип сообщения, отправляемого в журнал сообщений ядра. [1] Уровень журнала указывается путем добавления (с использованием конкатенации строковых литералов C ) строки, описывающей уровень журнала, к началу создаваемого сообщения. [1] Например, сообщение может быть создано в KERN_INFO используя следующее: [1]

printk(KERN_INFO "Message: %s\n", arg);

Строка, определяющая уровень журнала, состоит из начального символа заголовка ASCII, за которым следует цифра, описывающая уровень журнала, или символ «c», указывающий, что сообщение является продолжением предыдущего сообщения. [1] [3] Следующие уровни журнала вместе с их интерпретациями приведены ниже. [4]

0 КЕРН_EMERG Аварийное состояние; система скорее всего мертва
1 CORE_ALERT Проблема, требующая немедленного внимания
2 КЕРН_КРИТ Критическое состояние
3 КЕРН_ЕРР Ошибка
4 КЕРН_ПРЕДУПРЕЖДЕНИЕ Предупреждение
5 CORE_NOTICE Нормальное, но, возможно, примечательное состояние.
6 CORE_INFO Информационное сообщение
7 КЕРН_ДЕБУГ Отладочное сообщение, обычно лишнее

Если уровень журнала не указан, уровень журнала по умолчанию KERN_WARNING, [1] если в самом ядре не установлено другое значение по умолчанию, например, с помощью loglevel= аргумент загрузки. [5]

Уровни журнала определены в <linux/kern_levels.h>. [3] Какие уровни журнала печатаются, настраивается с помощью sysctl . файла /proc/sys/kernel/printk. [1]

Форматы указателей

[ редактировать ]

The %p спецификатор формата (используется для печати указателей в printf) расширен для добавления дополнительных режимов форматирования, например, запроса на печать struct sockaddr * с использованием %pISpc будет печатать адрес и порт IPv4/v6 в удобном для человека формате (например, «1.2.3.4:12345» или «[1:2:3:4:5:6:7:8]:12345»). [6]

Нет поддержки с плавающей запятой

[ редактировать ]

Пока printf поддерживает вывод чисел с плавающей запятой, printk нет, [6] поскольку ядро ​​Linux не использует числа с плавающей запятой внутри ядра. [7]

Описание

[ редактировать ]

Функция пытается заблокировать семафор, контролирующий доступ к системной консоли. [1] [8] Если это удалось, выходные данные записываются в журнал и вызываются драйверы консоли. [1] Если невозможно получить семафор, выходные данные помещаются в буфер журнала, и текущий владелец семафора консоли заметит новый вывод, когда он освободит семафор консоли, и отправит буферизованный вывод на консоль перед освобождением семафора. . [1]

Одним из последствий этой отложенной печати является код, который вызывает printk а затем изменения уровней журнала, которые будут напечатаны, могут сломаться. Это связано с тем, что уровень журнала, который будет распечатан, проверяется во время фактической печати. [1]

Функция printk может быть вызван из любого места ядра, за исключением самых ранних стадий процесса загрузки ядра; когда системная консоль не инициализирована. [4] Альтернативная функция early_printk реализован на некоторых архитектурах и используется идентично printk на ранних стадиях процесса загрузки. [4]

  1. ^ Перейти обратно: а б с д и ж г час я дж к л м н тот п д р «Журнал сообщений с помощью printk — Документация по ядру Linux» . www.kernel.org . Проверено 9 сентября 2020 г.
  2. ^ ИСО/МЭК 9899:2018 . Международная организация по стандартизации. 2018.
  3. ^ Перейти обратно: а б "kern_levels.h" . Гитхаб . Проверено 27 сентября 2020 г.
  4. ^ Перейти обратно: а б с «принтк()» . архив.есть . 30 августа 2007 г. Архивировано из оригинала 30 августа 2007 г. Проверено 9 сентября 2020 г.
  5. ^ «Параметры командной строки ядра» . ядро.орг . Проверено 27 сентября 2023 г.
  6. ^ Перейти обратно: а б «Как правильно получить спецификаторы формата printk — Документация по ядру Linux» . www.kernel.org . Проверено 9 сентября 2020 г.
  7. ^ «Re: Ядро Linux и плавающая запятая» . www.redhat.com . Проверено 9 сентября 2020 г.
  8. ^ «Основы драйверов — документация по ядру Linux» . www.kernel.org . Проверено 9 сентября 2020 г.
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 8251d4a634f6640ff4acd93e877fad14__1712006400
URL1:https://arc.ask3.ru/arc/aa/82/14/8251d4a634f6640ff4acd93e877fad14.html
Заголовок, (Title) документа по адресу, URL1:
printk - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)