linux - 如何在 linux 内核空间中读取环形缓冲区?

标签 linux logging linux-kernel kernel circular-buffer

我正在编写一个可以在用户空间打印系统日志的 Linux 字符驱动程序。正如命令“dmesg”所做的那样。 我了解到我们用'printk'打印的所有日志都会被发送到一个名为ring buffer的空间。所以我有以下问题:

  1. 环形缓冲区是否在内核空间内?
  2. 如果是这样,我如何读取内核空间中的环形缓冲区? (我试图阅读 dmesg.c 的源代码。但它没有帮助。)

最佳答案

你要找的是/proc/kmsg。这是内核环缓冲区!

  1. 是的,这是在内核空间内。任何试图读取它的进程都应该有 super 用户权限才能读取它!

  2. 如何读取环形缓冲区?这是来自 IBM Developerworks 的精美插图

Reading the Kernel Ring Buffer

dmesg 将是您的首选! dmesg如何完成任务?通过调用 syslog()! syslog如何做它的工作?通过系统调用接口(interface)依次调用do_syslog()do_syslog() 完成类似 this 的操作.

这里有更多资源,可以让您了解有关 /proc/kmsg 和一般内核日志记录的更多信息-

  1. http://www.makelinux.net/ldd3/chp-4-sect-2

  2. http://www.ibm.com/developerworks/linux/library/l-kernel-logging-apis/index.html

  3. http://oguzhanozmen.blogspot.in/2008/09/kernel-log-buffering-printk-syslog-ng.html

关于linux - 如何在 linux 内核空间中读取环形缓冲区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9533708/

相关文章:

mysql - 将 linux 命令的输出导入 MySQL 表

logging - 何时使用不同的日志级别

Heroku 日志没有显示任何错误,但我的大多数 URL 都显示为 "We' 抱歉,但出了点问题。”

linux - 正在旋转并试图获得自旋锁的线程不能被抢占吗?

c - Linux 中使用 C 的接口(interface)绑定(bind)(聚合)

谁能解释一下以下结构

linux - 使用 screen 和设置压缩级别在 bash 中压缩文件

php - E : Package 'php-xmlrpc' has no installation candidate

python - 在 1and1 专用服务器上部署 django

android - 如何在 Google Analytics 中将日志级别正确设置为详细?