日志记录重定向到文件

                //打开文件

                fp = fopen("/mnt/sdcard/com.log", "at+");

                if(fp == NULL)
                {
                    perror("fopen:");
                    printf("fopen(/mnt/sdcard/com.log) err...\n");
                }

                //重定向文件

                oldstdout    = dup(STD_OUT);
                dup2(fileno(fp) , STD_OUT);
                oldstderr    = dup(STD_ERR);
                dup2(fileno(fp) , STD_ERR);


               //限定日志文件大小,大于限定值清空文件重写

               while(1)
               {
                int rc = ftell(fp);
                if(rc < 0)
                {
                    perror("ftell:");
                }
                if(rc > 10*1024)
                {
                    //还原重定向
                    dup2(oldstdout, STD_OUT);
                    close(oldstdout);
                    dup2(oldstderr, STD_ERR);
                    close(oldstderr);
                    fclose(fp);

                    //重定位标准输出,错误输出到fp

                    fp = fopen("/mnt/sdcard/com.log", "wb+");
                    if(fp == NULL)
                    {
                        perror("fopen:");
                        printf("fopen(/mnt/sdcard/com.log) err...\n");
                    }
                    rc = fseek(fp, 0, SEEK_SET);
                    if(rc < 0)
                    {
                        perror("fseek:");
                    }
                    oldstdout    = dup(STD_OUT);
                    //dup2(sock, STD_OUT);
                    dup2(fileno(fp) , STD_OUT);
                    oldstderr    = dup(STD_ERR);
                    //dup2(sock, STD_ERR);
                    dup2(fileno(fp) , STD_ERR);
                    rc = lseek(STD_OUT, 0, SEEK_SET);
                    if(rc < 0)
                    {
                        perror("lseek:");
                    }
                    rc = lseek(STD_ERR, 0, SEEK_SET);
                    if(rc < 0)
                    {
                        perror("lseek:");
                    }
                    printf("\n\n############# reset file pos 0 ####################\n\n");
                }
                sleep(3);
            }

该方案可用于设备日志系统,用于记录设备的运行情况,当设备出现异常后有完整的日志信息用于定位问题。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值