dmesg打印信息如何后台保存到文件中
来源:互联网 发布:struts2源码分析 pdf 编辑:程序博客网 时间:2024/06/07 06:00
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信息。
- dmesg打印信息如何后台保存到文件中
- dmesg打印信息如何后台保存到文件中
- dmesg打印信息如何后台保存到文件中
- 保存dmesg 信息到文件源码
- C#中如何将信息保存到txt文件中去,以及如何读取
- ios 日志信息打印到文件中
- Linux中如何使用dmesg输出内核信息
- Linux中如何使用dmesg输出内核信息
- 如何把X264输出的INFO信息保存到文件
- 如何把jvm垃圾回收信息打印到文件
- [C/C++]随机生成信息,并保存到文件中
- 【实战】学生信息保存到xm文件l中
- Qt-将QDebug信息保存到文件中
- 内核信息打印到文件
- 打印日志信息到文件
- 模块中printk信息打印到指定文件 终端 网络
- 将运行信息打印日志到文件中
- Makefile & Android.mk文件中如何输出打印信息
- 【PAT】1046. Shortest Distance (20)
- 坐标变换 及矩阵变换
- Unity3d中的属性(Attributes)整理
- Android 判断现在系统存储器是“手机存储”还是“SD存储”
- android inflater 用法
- dmesg打印信息如何后台保存到文件中
- cocos2d-x——CCCallFunc家族例子
- uva10344 一次AC
- mysql 清除密码
- http状态码
- POI中设置Excel单元格格式样式(居中,字体,边框等)
- 【C语言】宏定义的一些所见所闻和心得
- 原型设计Axure
- 【SQL】使用ROW_NUMBER() OVER 实现DISTINCT功能