dmesg打印信息如何后台保存到文件中

         dmesg调试i信息常常作为判断系统异常退出的重要信息,但是当个系统异常退出或重启时,信息又难以保存下来,于是才有了将dmesg调试信息保存到文件中的想法:

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
//#include <linux/autoconf.h>//内核编译的配置信息
#include <sys/klog.h>
#include <sys/stat.h>
//#define __LOG_BUF_LEN   (1 << CONFIG_LOG_BUF_SHIFT)//在2.6.28内核中为默认1<<17,这才是真正dmesg buffer的大小,网上其他都扯淡。
#define __LOG_BUF_LEN   (1 << 17)//在2.6.28内核中为默认1<<17,这才是真正dmesg buffer的大小,网上其他都扯淡。
#define __LOG_PATH      "/home/default/dmesg.log"
#define LOG_SLEEP(x)    (sleep(x))
#define __LOG_SIZE      10485760//大于10M时删除文件
#define BUF_SIZE        256


long check_log_size(void)
{
	struct stat f_stat;
	if( stat( __LOG_PATH, &f_stat ) == -1 )
	{
		return -1;
	}
	return (long)f_stat.st_size;
}

int main(int argc, char *argv[])
{
	char buf[__LOG_BUF_LEN]={0,};
	char tmpbuf[BUF_SIZE]={0,};
	int ret = 0;
	FILE *fp =NULL;
	struct tm *ptr;
	time_t lt;
	//daemon(0,0);//进入守护模式
	while(1)
	{
		LOG_SLEEP(120);//sleep 10 秒
		fp = fopen(__LOG_PATH,"a+");//追加打开
		if(NULL == fp)
		{
			printf("creat file faild !\n");
			continue;
		}
		ret = klogctl(4,buf,__LOG_BUF_LEN);//获得dmesg信息,该函数需要超级用户权限运行
		if(0 >= ret){
			perror("klogctl ");
			fclose(fp);
			continue;
		}
		lt = time(NULL);//获得时间
		ptr = (struct tm *)localtime(<);
		sprintf(tmpbuf,"       [LOG TIME:]       %s",asctime(ptr));//记录时间
		printf("tmpbuf = %s\n",tmpbuf);
		fwrite(tmpbuf,strlen(tmpbuf),1,fp);
		fwrite(buf,strlen(buf),1,fp);
		fflush(fp);
		fclose(fp);
		if(__LOG_SIZE < check_log_size())
		{
			unlink(__LOG_PATH);//删除该文件
		}
		memset(tmpbuf,0,BUF_SIZE);
		memset(buf,0,__LOG_BUF_LEN);
	}
	return 0;
}

以下是Makefil

CC := arm-none-linux-gnueabi-gcc
all:dmesg_test

dmesg_test:dmesg_test.c
	$(CC) dmesg_test.c -o dmesg_test -Wall

install:
	cp dmesg_test /nfsroot/update

clean:
	rm dmesg_test

运行:dmesg_test &

程序就进入后台执行了,每隔120秒会读取一次dmesg信息。

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值