Linux 打印简单日志(一)
簡(jiǎn)單日志輸出:
#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);
日志會(huì)出現(xiàn)亂碼的情況
?
fopen()函數(shù):
函數(shù)聲明:include<stdio.h>
函數(shù)原型:FILE *fopen(const char *filename, const char *mode);
函數(shù)參數(shù):filename:log文件名? mode:文件訪問(wèn)模式
函數(shù)功能:按照給的的模式mode打開(kāi)filename所指向的文件
函數(shù)返回值:文件順利打開(kāi)后,指向改流的文件指針就會(huì)被返回。如果文件打開(kāi)失敗,就返回NULL,并把錯(cuò)誤代碼存儲(chǔ)在error中。
參數(shù)說(shuō)明:
mode有幾種形態(tài)的字符串:
?
| r | 以只讀的方式打開(kāi)文件,文件必須存在 |
| r+ | 以讀/寫(xiě)的方式打開(kāi)文件,文件必須存在 |
| rb+ | 以讀/寫(xiě)的方式打開(kāi)一個(gè)二進(jìn)制文件,只允許讀寫(xiě)數(shù)據(jù) |
| rt+ | 以讀/寫(xiě)方式打開(kāi)一個(gè)文本文件,允許讀和寫(xiě) |
| w | 打開(kāi)只讀文件,若文件存在則文件長(zhǎng)度清零,即文件內(nèi)容會(huì)消失;若文件不存在,則創(chuàng)建該文件 |
| a | 以附加的方式打開(kāi)只寫(xiě)文件,若文件不存在,則創(chuàng)建該文件,若文件存在,將寫(xiě)入的數(shù)據(jù)加在文件的末尾 |
| a+ | 以附加的方式打開(kāi)讀/寫(xiě)文件,若文件不存在,則創(chuàng)建該文件,若文件存在,將寫(xiě)入的數(shù)據(jù)加在文件的末尾 |
| wb | 以只寫(xiě)的方式打開(kāi)或新建一個(gè)二進(jìn)制文件,只允許寫(xiě)數(shù)據(jù) |
| wb+ | 以只寫(xiě)的方式打開(kāi)或新建一個(gè)二進(jìn)制文件,允許讀和寫(xiě) |
| wt+ | 以讀/寫(xiě)的方式打開(kāi)一個(gè)文本文件,允許讀和寫(xiě) |
| at+ | 以讀/寫(xiě)方式打開(kāi)一個(gè)文本文件,允許讀或在文本末追加數(shù)據(jù) |
| ab+ | 以讀/寫(xiě)的方式打開(kāi)一個(gè)二進(jìn)制文件,允許讀或者在文件末尾追加數(shù)據(jù) |
補(bǔ)充:
1.以x結(jié)尾的模式為獨(dú)占模式,文件已存在或無(wú)法創(chuàng)建(一般為路徑文件問(wèn)題)導(dǎo)致fopen打開(kāi)失敗。文件以操作系統(tǒng)支持的獨(dú)占模式打開(kāi)。
2.上述的形態(tài)字符串都可以再加一個(gè)b字符,如rb/w+b/ab+等,加入b字符來(lái)告訴函數(shù)庫(kù)以二進(jìn)制打開(kāi)文件。如果沒(méi)有b,則默認(rèn)加t,即以文本模式打開(kāi)文件。
3.二進(jìn)制和文本模式區(qū)別:
在windows系統(tǒng)中,文本模式下:文件以“\n\r”代表?yè)Q行。若以文本模式打開(kāi)文件,并用fputs等函數(shù)寫(xiě)入換行符“\n”時(shí),函數(shù)會(huì)自動(dòng)在“\n”前面加“\r”。即實(shí)際寫(xiě)入文件的時(shí)“\r\n”。
在unix/linux系統(tǒng)中,文本模式下“\n”代表?yè)Q行,linux系統(tǒng)下文本和二進(jìn)制模式下無(wú)區(qū)別。
?
總結(jié):
?
?
fwrite()函數(shù):
函數(shù)原型:size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream)
函數(shù)參數(shù):
ptr:????? 指向要被寫(xiě)入的元素?cái)?shù)組的指針。
size:??? 要被寫(xiě)入的每個(gè)元素的大小,單位字節(jié)
nmemb:???? 元素的個(gè)數(shù),每個(gè)元素大小為size字節(jié)
stream:????? 這是指向FILE對(duì)象的指針,該FILE對(duì)象指定了一個(gè)輸出流。
?
函數(shù)功能:把ptr所指向的數(shù)組中的數(shù)據(jù)寫(xiě)入到指定的stream中。
返回值:?????? 如果成功,返回一個(gè)size_t的對(duì)象,表示元素的總數(shù),該對(duì)象是一個(gè)整型數(shù)據(jù)類(lèi)型。如果該數(shù)字與nmemb參數(shù)不同,則會(huì)出現(xiàn)一個(gè)錯(cuò)誤。
轉(zhuǎn)載于:https://www.cnblogs.com/wanghao-boke/p/11150859.html
總結(jié)
以上是生活随笔為你收集整理的Linux 打印简单日志(一)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: html 同一个 能提交给不同的地址吗
- 下一篇: 古镜记药仙人在哪