日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

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

發(fā)布時(shí)間:2024/3/13 59 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux自定义日志文件设置回滚(避免信息溢出) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

    • 一、概述
    • 二、代碼實(shí)現(xiàn)
    • 三、所用函數(shù)說(shuō)明
      • (1)C庫(kù)函數(shù)ftell()
      • (2)C庫(kù)函數(shù)fseek()
      • (3)C庫(kù)函數(shù)rewind()
      • (4)Linux系統(tǒng)函數(shù)truncate()

一、概述

我們?cè)贚inux下面進(jìn)行項(xiàng)目開發(fā)的時(shí)候,一般都將打印的信息輸出到特定的日志文件中,可以是系統(tǒng)自帶的syslog日志系統(tǒng)文件,也可以是我們自己寫的日志系統(tǒng)文件,如果是我們自己寫的日志系統(tǒng),我們就不得不考慮內(nèi)存空間有限,而不能無(wú)限地存儲(chǔ)程序所打印的信息了,那我們?cè)趺幢苊膺@種情況,使得日志文件數(shù)據(jù)達(dá)到一定值的時(shí)候自動(dòng)清空呢?就是說(shuō)如何達(dá)到日志回滾呢?

二、代碼實(shí)現(xiàn)

以下是本人寫的日志回滾函數(shù):

//參數(shù)logfile為日志文件的路徑和文件名,logsize為判斷值,當(dāng)大于這個(gè)值時(shí),我們需要進(jìn)行清空操作 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的話,每次打開這個(gè)文件都會(huì)被清空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); }

三、所用函數(shù)說(shuō)明

(1)C庫(kù)函數(shù)ftell()

作用:
C 庫(kù)函數(shù) long int ftell(FILE *stream) 返回給定流 stream 的當(dāng)前文件位置。

函數(shù)原型:

long int ftell(FILE *stream)

參數(shù):
stream – 這是指向 FILE 對(duì)象的指針,該 FILE 對(duì)象標(biāo)識(shí)了流。

返回值:
該函數(shù)返回位置標(biāo)識(shí)符的當(dāng)前值。如果發(fā)生錯(cuò)誤,則返回 -1L,全局變量 errno 被設(shè)置為一個(gè)正值。

(2)C庫(kù)函數(shù)fseek()

作用:
C 庫(kù)函數(shù) int fseek(FILE *stream, long int offset, int whence) 設(shè)置流 stream 的文件位置為給定的偏移 offset,參數(shù) offset 意味著從給定的 whence 位置查找的字節(jié)數(shù)。

函數(shù)原型:

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

參數(shù):
stream – 這是指向 FILE 對(duì)象的指針,該 FILE 對(duì)象標(biāo)識(shí)了流。
offset – 這是相對(duì) whence 的偏移量,以字節(jié)為單位。
whence – 這是表示開始添加偏移 offset 的位置。它一般指定為下列常量之一:
SEEK_SET 文件的開頭
SEEK_CUR 文件指針的當(dāng)前位置
SEEK_END 文件的末尾

返回值:
如果成功,則該函數(shù)返回零,否則返回非零值。

(3)C庫(kù)函數(shù)rewind()

作用:
C 庫(kù)函數(shù) void rewind(FILE *stream) 設(shè)置文件位置為給定流 stream 的文件的開頭。

函數(shù)原型:

void rewind(FILE *stream)

參數(shù):
stream – 這是指向 FILE 對(duì)象的指針,該 FILE 對(duì)象標(biāo)識(shí)了流。

返回值:
該函數(shù)不返回任何值。

(4)Linux系統(tǒng)函數(shù)truncate()

依賴頭文件:

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

函數(shù)原型:

int truncate(const char *path,off_t length)

truncate()函數(shù)會(huì)使名稱為path的文件被截?cái)喑梢粋€(gè)大小為length字節(jié)的文件。如果先前的文件大于length,額外的數(shù)據(jù)丟失。如果先前的文件小于當(dāng)前定義的大小,那么,這個(gè)文件將會(huì)被擴(kuò)展,擴(kuò)展的部分將補(bǔ)以null,也就是‘\0’。 使用truncate函數(shù)的文件必須能夠被寫。

總結(jié)

以上是生活随笔為你收集整理的Linux自定义日志文件设置回滚(避免信息溢出)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。