文章目录

  • 一、概述
  • 二、代码实现
  • 三、所用函数说明
    • (1)C库函数ftell()
    • (2)C库函数fseek()
    • (3)C库函数rewind()
    • (4)Linux系统函数truncate()

一、概述

我们在Linux下面进行项目开发的时候,一般都将打印的信息输出到特定的日志文件中,可以是系统自带的syslog日志系统文件,也可以是我们自己写的日志系统文件,如果是我们自己写的日志系统,我们就不得不考虑内存空间有限,而不能无限地存储程序所打印的信息了,那我们怎么避免这种情况,使得日志文件数据达到一定值的时候自动清空呢?就是说如何达到日志回滚呢?

二、代码实现

以下是本人写的日志回滚函数:

//参数logfile为日志文件的路径和文件名,logsize为判断值,当大于这个值时,我们需要进行清空操作
int check_and_rollback(char *logfile, int logsize)
{   FILE        *logfile_fp = NULL;long int    _curOffset;char        cmd[512];if(logsize <= 0){fprintf(stderr, "%s input error argument!\n", __func__);return -1;}logfile_fp = fopen(logfile, "r");//注意以只读打开文件,用w的话,每次打开这个文件都会被清空if(!logfile_fp){fprintf(stderr, "Open %s failure!\n", logfile);return -2;}fseek(logfile_fp, 0, SEEK_END);_curOffset = ftell(logfile_fp);printf("_curOffset:%ld\n", _curOffset);if((_curOffset != -1) && (_curOffset >= logsize)){snprintf(cmd, sizeof(cmd), "cp -f %s %s.roll", logfile, logfile);if(system(cmd) == -1){fprintf(stderr, "Execute system() failure!\n");}if(-1 == fseek(logfile_fp, 0, SEEK_SET)){fprintf(logfile_fp, "Log rollback fseek failed!\n");}rewind(logfile_fp);truncate(logfile, 0);fprintf(logfile_fp, "Already rollback!\n");}fclose(logfile_fp);
}

三、所用函数说明

(1)C库函数ftell()

作用:
C 库函数 long int ftell(FILE *stream) 返回给定流 stream 的当前文件位置。

函数原型:

long int ftell(FILE *stream)

参数:
stream – 这是指向 FILE 对象的指针,该 FILE 对象标识了流。

返回值:
该函数返回位置标识符的当前值。如果发生错误,则返回 -1L,全局变量 errno 被设置为一个正值。

(2)C库函数fseek()

作用:
C 库函数 int fseek(FILE *stream, long int offset, int whence) 设置流 stream 的文件位置为给定的偏移 offset,参数 offset 意味着从给定的 whence 位置查找的字节数。

函数原型:

 int fseek(FILE *stream, long int offset, int whence)

参数:
stream – 这是指向 FILE 对象的指针,该 FILE 对象标识了流。
offset – 这是相对 whence 的偏移量,以字节为单位。
whence – 这是表示开始添加偏移 offset 的位置。它一般指定为下列常量之一:
SEEK_SET 文件的开头
SEEK_CUR 文件指针的当前位置
SEEK_END 文件的末尾

返回值:
如果成功,则该函数返回零,否则返回非零值。

(3)C库函数rewind()

作用:
C 库函数 void rewind(FILE *stream) 设置文件位置为给定流 stream 的文件的开头。

函数原型:

void rewind(FILE *stream)

参数:
stream – 这是指向 FILE 对象的指针,该 FILE 对象标识了流。

返回值:
该函数不返回任何值。

(4)Linux系统函数truncate()

依赖头文件:

#include<unistd.h>
#include<sys/types.h>

函数原型:

int truncate(const char *path,off_t length)

truncate()函数会使名称为path的文件被截断成一个大小为length字节的文件。如果先前的文件大于length,额外的数据丢失。如果先前的文件小于当前定义的大小,那么,这个文件将会被扩展,扩展的部分将补以null,也就是‘\0’。 使用truncate函数的文件必须能够被写。

Linux自定义日志文件设置回滚(避免信息溢出)相关推荐

  1. python logging模块-写日志、log回滚

    python包/模块,专栏总目录: 1.python自定义模块 2.python模块调用顺序 3.python logging模块 4.python定义跨模块的全局变量 1.logging模块简介 l ...

  2. linux view查看日志命令,【Linux】linux查看日志文件内容命令tail、cat、tac、head、echo...

    linux查看日志文件内容命令tail.cat.tac.head.echo tail -f test.log 你会看到屏幕不断有内容被打印出来. 这时候中断第一个进程Ctrl-C, --------- ...

  3. log4j输出多个自定义日志文件、动态配置多个日志文件

    转:http://blog.sina.com.cn/s/blog_8417657f0101lskw.html log4j的强大功能无可置疑,但实际应用中免不了遇到某个功能需要输出独立的日志文件的情况, ...

  4. linux view查看日志命令,linux查看日志文件内容命令tail、cat、tac、head、echo、vi

    linux查看日志文件内容命令tail.cat.tac.head.echo tail -f test.log 你会看到屏幕不断有内容被打印出来. 这时候中断第一个进程Ctrl-C, --------- ...

  5. java查看日志命令_[Java教程]【Linux】linux查看日志文件内容命令tail、cat、tac、head、echo...

    [Java教程][Linux]linux查看日志文件内容命令tail.cat.tac.head.echo 0 2017-11-14 12:00:29 linux查看日志文件内容命令tail.cat.t ...

  6. linux查看日志文件内容命令tail、cat、tac、head、echo、vi

    linux查看日志文件内容命令tail.cat.tac.head.echo tail -f test.log 你会看到屏幕不断有内容被打印出来. 这时候中断第一个进程Ctrl-C, --------- ...

  7. Linux常见日志文件和常用命令

    此外,这里写的不错:http://os.51cto.com/art/200711/60313_1.htm 转自:http://www.51testing.com/html/51/46551-2116. ...

  8. Springboot 项目整合自定义日志文件

    前言 springboot项目添加日志文件,控制台输出一下信息,控制台日志文件没有打印全 Logging initialized using 'class org.apache.ibatis.logg ...

  9. linux阿帕奇日志文件,Linux下apache日志文件设置

    ##################################################################################### vi /etc/httpd/ ...

最新文章

  1. SharePoint 2010 BCS - 简单实例(二)外部列表创建
  2. 计算机用户要以ADSL,2012年计算机一级MsOffice第三十三套练习题及答案解析
  3. ESP32,使用gitee搭建 ESP-IDF 开发框架
  4. python图像分析_python分析问题步骤Python比较两个图片相似度的方法
  5. 【C++】C++类的学习(二)——构造函数、析构函数、拷贝构造函数以及this指针
  6. 嵌入式 Tomcat (Embedded Tomcat)
  7. python信用卡客户_Python之信用卡模拟程序
  8. 吉林大学校园网linux客户端,吉林大学校园网认证客户端 v5.2.1 pc版
  9. 计算机硬盘搜索记录,怎么清除Win7搜索记录 Win7搜索历史记录删除教程
  10. 机器人算法工程师入门指南(三)机器人算法工程师需要学习哪些知识?(及教材推荐)
  11. vue开发当中移动端中css常用相对单位
  12. 京东java前后端联调_前端工程化、组件化实践JDM分享
  13. GDAL / OGR 学习手册 [02] :栅格数据读取
  14. 1、学习笔记-谁说rookie不会数分(入门篇)
  15. 政策更新 | 开发者如何处理软件包可见性
  16. 总结哪些因素影响谷歌排名
  17. 基于单片机烟雾及温度报警器-火灾监测-毕设课设资料
  18. Dinal爱磕盐--QFN封装的焊接
  19. sigmoid函数是如何诞生的(最大熵原理)
  20. iOS 搜索功能实现

热门文章

  1. 我那么爱你为什么?伤感爱情日志
  2. php微信调用天气api,微信公众号接口开发--snoweek测试
  3. 如何给PDF删除空白页面?来看看这种方法
  4. DEM文件投影/基准面转换出现的问题
  5. 实现了私聊和群聊功能的聊天工具
  6. c++ | 尝试攥写头文件遇到的坑
  7. java从入门到弃坑十五天
  8. EISeg——应用于语义分割的自动标注软件
  9. maya之坐标轴与模型显示状态
  10. 女超人、女强人……究竟是谁在以“女”设限?