linux读取内核缓冲区失败,linux – read()清除内核环缓冲区/ proc / kmsg...

我开发了自己的日志处理程序.要处理源自printk()的日志,我从内核环缓冲区读取如下:

#define _PATH_KLOG "/proc/kmsg"

CGR_INT kernelRingBufferFileDescriptor = open(_PATH_KLOG, O_RDONLY|O_NONBLOCK);

CGR_CHAR kernelLogMessage[MAX_KERNEL_RING_BUFFER + 1] = {'\0'};

while (1)

{

...

read(kernelRingBufferFileDescriptor, kernelLogMessage + residueSize, MAX_KERNEL_RING_BUFFER);

...

}

我的程序在用户空间.我记得每当有人使用read()读取环形缓冲区中的数据时(就像我上面所做的那样),读取的部分将从环形缓冲区中清除.是这样吗,还是不是?

我对此感到困惑,因为环形缓冲区中总有一些东西,因此,我的程序正忙于处理所有这些日志.所以我不确定是不是因为某些模块正在向我发送日志,或者是因为我一次又一次地读取相同的日志,因为日志没有被清除.

要弄清楚,我使用klogctl()来检查环形缓冲区:

CGR_CHAR buf[MAX_KERNEL_RING_BUFFER] = {0};

int byteCount = klogctl(4, buf, MAX_KERNEL_RING_BUFFER - 1); /* 4 -- Read and clear all messages remaining in the ring buffer */

printf("%s %d: data read from kernel ring buffer = \"%s\"\n",__FILE__, __LINE__, buf);

而且我一直在不停地获取数据.由于带有参数4的klogctl()读取并清除了环形缓冲区,我有点相信某些模块一直向我发送日志.

任何人都可以告诉我 – 读取()清除环缓冲区吗?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值