Linux 打印簡單日志(一)


簡單日志輸出:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

void write(char* filename,char* szStr){
    FILE* fp;
    fp = fopen(filename,"at+");
    if(fp != NULL){
        fwrite(szStr,256,1,fp); //
        fclose(fp);
        fp = NULL;
    }
}

int main(int argc, char** argv){
    int i;
    for(i = 0; i < argc; i++){
        write("log.txt",argv[i]);
    }
    return 0;
}

Attention:

fwrite(szStr,256,1,fp); // fwrite(szStr,strlen(szStr),1,fp);

日志會出現亂碼的情況

 

fopen()函數:

函數聲明:include<stdio.h>

函數原型:FILE *fopen(const char *filename, const char *mode);

函數參數:filename:log文件名  mode:文件訪問模式

函數功能:按照給的的模式mode打開filename所指向的文件

函數返回值:文件順利打開后,指向改流的文件指針就會被返回。如果文件打開失敗,就返回NULL,並把錯誤代碼存儲在error中。

參數說明:

mode有幾種形態的字符串:

 

r

以只讀的方式打開文件,文件必須存在

r+

以讀/寫的方式打開文件,文件必須存在

rb+

以讀/寫的方式打開一個二進制文件,只允許讀寫數據

rt+

以讀/寫方式打開一個文本文件,允許讀和寫

w

打開只讀文件,若文件存在則文件長度清零,即文件內容會消失;若文件不存在,則創建該文件

a

以附加的方式打開只寫文件,若文件不存在,則創建該文件,若文件存在,將寫入的數據加在文件的末尾

a+

以附加的方式打開讀/寫文件,若文件不存在,則創建該文件,若文件存在,將寫入的數據加在文件的末尾

wb

以只寫的方式打開或新建一個二進制文件,只允許寫數據

wb+

以只寫的方式打開或新建一個二進制文件,允許讀和寫

wt+

以讀/寫的方式打開一個文本文件,允許讀和寫

at+

以讀/寫方式打開一個文本文件,允許讀或在文本末追加數據

ab+

以讀/寫的方式打開一個二進制文件,允許讀或者在文件末尾追加數據

補充:

1.以x結尾的模式為獨占模式,文件已存在或無法創建(一般為路徑文件問題)導致fopen打開失敗。文件以操作系統支持的獨占模式打開。

2.上述的形態字符串都可以再加一個b字符,如rb/w+b/ab+等,加入b字符來告訴函數庫以二進制打開文件。如果沒有b,則默認加t,即以文本模式打開文件。

3.二進制和文本模式區別:

在windows系統中,文本模式下:文件以“\n\r”代表換行。若以文本模式打開文件,並用fputs等函數寫入換行符“\n”時,函數會自動在“\n”前面加“\r”。即實際寫入文件的時“\r\n”。

在unix/linux系統中,文本模式下“\n”代表換行,linux系統下文本和二進制模式下無區別。

 

總結:

  1. 是否是二進制打開,加b
  2. 讀寫方式:只讀、只寫、讀寫、追加只寫、追加讀寫。
  3. 讀文件是否必須存在,以及存在時是清空還是追加不同的響應。

 

 

fwrite()函數:

函數原型:size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream)

函數參數:

ptr:      指向要被寫入的元素數組的指針。

size:    要被寫入的每個元素的大小,單位字節

nmemb:     元素的個數,每個元素大小為size字節

stream:      這是指向FILE對象的指針,該FILE對象指定了一個輸出流。

 

函數功能:把ptr所指向的數組中的數據寫入到指定的stream中。

返回值:       如果成功,返回一個size_t的對象,表示元素的總數,該對象是一個整型數據類型。如果該數字與nmemb參數不同,則會出現一個錯誤。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM