詳解C說話中的fopen()函數和fdopen()函數。本站提示廣大學習愛好者:(詳解C說話中的fopen()函數和fdopen()函數)文章只能為提供參考,不一定能成為您想要的結果。以下是詳解C說話中的fopen()函數和fdopen()函數正文
C說話fopen()函數:翻開一個文件並前往文件指針
頭文件:
#include <stdio.h>
fopen()是一個經常使用的函數,用來以指定的方法翻開文件,其原型為:
FILE * fopen(const char * path, const char * mode);
【參數】path為包括了途徑的文件名,mode為文件翻開方法。
mode有以下幾種方法:
在POSIX 體系,包括Linux 下都邑疏忽 b 字符。由fopen()所樹立的新文件會具有S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH(0666)權限,此文件權限也會參考umask 值。
二進制和文本形式的差別:
在windows體系中,文本形式下,文件以"\r\n"代表換行。若以文本形式翻開文件,並用fputs等函數寫入換行符"\n"時,函數會主動在"\n"後面加上"\r"。即現實寫入文件的是"\r\n" 。
在類Unix/Linux體系中文本形式下,文件以"\n"代表換行。所以Linux體系中在文本形式和二進制形式下並沒有差別。
更多信息請檢查:C說話fopen()翻開文本文件與二進制文件的差別
有些C編譯體系能夠不完整供給一切這些功效,有的C版本不消"r+","w+","a+",而用"rw","wr","ar"等,讀者留意所用體系的劃定。
【前往值】文件順遂翻開後,指向該流的文件指針就會被前往。若果文件翻開掉敗則前往NULL,並把毛病代碼存在errno 中。
留意:普通而言,開文件後會作一些文件讀取或寫入的舉措,若開文件掉敗,接上去的讀寫舉措也沒法順遂停止,所以在fopen()後請作毛病斷定及處置。
文件操作完成後,須要將文件封閉,必定要留意,不然會形成文件所占用內存洩漏和鄙人次拜訪文件時湧現成績。
文件封閉後,須要將文件指針指向空,如許做會避免湧現游離指針,而對全部工程形成不用要的費事,如fp = NULL。
【實例】翻開一個文件然後封閉該文件。
#include<stdio.h> #include<string.h> #include<stdlib.h> int main() { FILE* fstream; char msg[100] = "Hello!I have read this file."; fstream=fopen("test.txt","at+"); if(fstream==NULL) { printf("open file test.txt failed!\n"); exit(1); } else { printf("open file test.txt succeed!\n"); } fclose(fstream); return 0; }
C說話fdopen()函數:將文件描寫詞轉為文件指針
頭文件:
#include <stdio.h>
界說函數:
FILE * fdopen(int fildes, const char * mode);
函數解釋:fdopen()會將參數fildes 的文件描寫詞, 轉換為對應的文件指針後前往.
參數mode 字符串則代表著文件指針的流形狀, 此形狀必需和本來文件描寫詞讀寫形式雷同. 關於mode 字符串格局請參考fopen().
前往值:轉換勝利時前往指向該流的文件指針. 掉敗則前往NULL, 並把毛病代碼存在errno 中.
典范
#include <stdio.h> main() { FILE * fp = fdopen(0, "w+"); fprintf(fp, "%s\n", "hello!"); fclose(fp); }
履行
hello!