fread、fwrite、fopen函數的簡單使用和open、read、write區別解析

這幾個函數的區別:fread、fwrite、fopen和open、read、write區別解析

標準C庫函數的簡單使用

fopen函數原型:

#include <stdio.h>
FILE *fopen(const char *pathname, const char *mode);第一個參數是:要打開的文件路徑
第二個參數是:以什么權限打開
文件順利打開后,指向該流的 文件指針(FILE*) 就會被返回。如果文件打開失敗則返回NULL,并把錯誤代碼存在errno 中。
mode打開模式(注意雙引號):
“r”  以只讀方式打開文件,該文件必須存在。“r+” 以可讀寫方式打開文件,該文件必須存在。”rb+“ 讀寫打開一個 二進制文件,允許讀寫數據(可以任意修改),文件必須存在。“w”   打開只寫文件,若文件存在則文件長度清為0,即該文件內容會消失。若文件不存在則建立該文件。“w+”  打開可讀寫文件,若文件存在則文件長度清為零,即該文件內容會消失。若文件不存在則建立該文件。“a”   以附加的方式打開只寫文件。若文件不存在,則會建立該文件,如果文件存在,寫入的數據會被加到文件尾,即文件原先的內容會被保留。(
EOF符保留)”a+“  以附加方式打開可讀寫的文件。若文件不存在,則會建立該文件,如果文件存在,寫入的數據會被加到文件尾后,即文件原先的內容會被保留。
(原來的EOF符不保留)“wb”  只寫打開或新建一個 二進制文件;只允許寫數據(若文件存在則文件長度清為零,即該文件內容會消失)“wb+” 讀寫打開或建立一個二進制文件,允許讀和寫(若文件存在則文件長度清為零,即該文件內容會消失)

fwrite函數:

#include <stdio.h>
size_t fwrite(const void *ptr, size_t size, size_t nmemb,FILE *stream);ptr:是一個指向用于保存數據的內存位置的指針(是一個指針,對于fwrite來說,是要獲取數據的地址)
size:   是每次讀取的字節數
nmemb:  是讀取的次數
stream: 是數據寫入的流(目標指針的文件)
返回值:
成功,該函數返回一個 size_t 對象,表示元素的總數(其實就是nmemb),該對象是一個整型數據類型。如果該數字與 nmemb 參數不同,則會顯示一個錯誤。
失敗:返回0
是實際寫入的元素(并非字節)數目
ps:如果輸入過程中遇到了文件尾或者輸出過程中出現了失誤,這個數字可能比請求的元素數目要小

fread函數:

size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);buffer:  是讀取的數據存放的內存的指針,(可以是數組,也可以是新開辟的空間)ps:   是一個指向用于保存數據的內存位置的指針(為指向緩沖區保存或讀取的數據或者是用于接收數據的內存地址)
size:   是每次讀取的字節數
nmemb:  是讀取的次數
stream:  是要讀取的文件的指針ps: 是數據讀取的流(輸入流)返回值:
成功:是實際讀取的元素(并非字節)數目,當目標緩沖區是20字節時,而讀100次,返回的是實際讀到有字節的次數。
失敗:返回0
ps:如果輸入過程中遇到了文件尾或者輸出過程中出現了錯誤,這個數字可能比請求的元素數目要小

fseek函數:

int fseek( FILE *stream, long offset, int origin );
第一個參數stream為文件指針
第二個參數offset為偏移量,整數表示正向偏移,負數表示負向偏移
第三個參數origin設定從文件的哪里開始偏移,可能取值為:SEEK_CURSEEK_ENDSEEK_SET
SEEK_SET: 文件開頭
SEEK_CUR: 當前位置
SEEK_END: 文件結尾
其中SEEK_SET,SEEK_CURSEEK_END和依次為012.
返回值:成功返回0,失敗返回非0.

代碼的綜合:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{FILE *fp;//定義文件指針char* buf="ffffff";char* readbuf=NULL;readbuf=(char*)malloc(strlen(buf));int n_write;int n_read;fp=fopen("./filetest","w+");if(fp==NULL){printf("文件打開失敗\n");perror("fopen");exit(0);}n_write=fwrite(buf,sizeof(char),strlen(buf),fp);if(n_write==0){printf("寫入失敗\n");perror("fwrite");exit(0);}fseek(fp,0,0);n_read=fread(readbuf,sizeof(char),strlen(buf),fp);if(n_read==0){printf("讀取失敗\n");perror("fread");exit(0);}fseek(fp,0,0);n_read=fread(readbuf,sizeof(char),strlen(buf),fp);if(n_read==0){printf("讀取失敗\n");perror("fread");exit(0);}printf("寫入:%d個,讀出:%d個,內容為:%s\n",n_write,n_read,readbuf);fclose(fp);return 0;
}

fputc、fputs、feof、fgetc、fgets函數:

int fputc(int c, FILE *stream);
參數:c:字符fp:文件指針
返回值:成功:返回寫入的字符失敗:返回EOF
int fputs(const char *s, FILE *stream);
參數:s:字符串fp:文件指針
返回值:成功:返回非負數失敗:返回EOFfgetc函數原型:int fgetc(FILE *stream);從文件fp中讀入一個字節,指針自動后移為什么fgetc返回的是int而不是char?
通過man fgetc查看其返回值:fgetc(), getc() and getchar() return the character read as an unsigned char cast to an int or EOF on end of file or error.
返回時,unchar型會被轉換為int,因為讀到文件尾時需要返回的是EOF-1, 如果為char型,-10XFF相等,會發生沖突
返回值: 若成功,則返回讀取的“字節”,同于fputc函數的 ch,到達文件尾,返回EOF結束函數原型char * fgets(char *str,int n,FILE *fp)從文件中每次讀入一行。
str是存放將要讀入字符型數據的存放地址
n是數目變量
fp是文件指針
該函數表明從文件fp中讀入n-1個字符放在以str為起始地址的空間
因為系統會在最后加上一個‘\0’。讀入過程中:
若該行字符數不超過n-2(2代表該行本身的換行符‘\n’和系統自動加上的'\0')
則函數讀完該行就結束,文件指針移動到下一行,再進行文件讀入操作時,從下一行開始讀入。若該行字符數目總數(不包含換行符)大于n-2,則只讀入n-1個字符(1代表系統自己加上的'\0')
文件指針自動移動到下一個字符處,再進行文件讀入操作時,順序讀入該行剩下的字符。返回值:
文件讀入成功則返回str,失敗或者讀到文件尾則返回null。feof 函數原型:int feof(FILE *stream);
feof()是檢測流上的文件結束符的函數,如果文件結束,則返回非0值,否則返回0

大佬博客:fgets 函數用法

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/272229.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/272229.shtml
英文地址,請注明出處:http://en.pswp.cn/news/272229.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

docker安裝rocketmq你學會了嗎

防火墻開通端口 9876 10911 9800 firewall-cmd --zonepublic --add-port9876/tcp --permanent firewall-cmd --zonepublic --add-port10911/tcp --permanent firewall-cmd --zonepublic --add-port9800/tcp --permanent firewall-cmd --reload 創建存儲文件夾 mkdir -p /root…

程序員的編程能力與編程年齡

作者丨酷殼/陳皓&#xff0c; http://coolshell.cn/articles/10688.html程序員這個職業究竟可以干多少年&#xff0c;在中國這片神奇的土地上&#xff0c;很多人都說只能干到30歲&#xff0c;然后就需要轉型&#xff0c;就像《程序員技術練級攻略》這篇文章很多人回復到這種玩…

Rocketmq集群架構圖

集群架構圖 集群特點

進程相關概念、C程序的空間分配

進程的定義&#xff1a; “進程”是操作系統的最基本、最重要的概念之一。但迄今為止對這一概念還沒有一個確切的統一的描述。下面給出幾種對進程的定義描述。 進程是程序的一次執行。進程是可以并行執行的計算。進程是一個程序與其使用的數據在處理機上順序執行時發生的活動。…

(精)C#中TransactionScope的使用方法和原理

標簽&#xff1a;.net transactionscope原創作品&#xff0c;允許轉載&#xff0c;轉載時請務必以超鏈接形式標明文章 原始出處 、作者信息和本聲明。否則將追究法律責任。http://cnn237111.blog.51cto.com/2359144/1271600在.net 1.1的時代&#xff0c;還沒有TransactionScope…

一文搞定并發面試題

1、Object 的 wait()和notify() 方法下圖為線程狀態的圖&#xff1a;Object 對象中的 wait()和notify()是用來實現實現等待 / 通知模式。其中等待狀態和阻塞狀態是不同的。等待狀態的線程可以通過notify() 方法喚醒并繼續執行&#xff0c;而阻塞狀態的線程則是等待獲取新的鎖。…

fork、vfork、wait、waitpid

fork函數&#xff1a; 一個進程&#xff0c;包括代碼、數據和分配給進程的資源。fork&#xff08;&#xff09;函數通過系統調用創建一個與原來進程幾乎完全相同的進程&#xff0c;也就是兩個進程可以做完全相同的事&#xff0c;但如果初始參數或者傳入的變量不同&#xff0c;兩…

java解析xml

<?xml version"1.0" encoding"UTF-8"?> <mimetype><default><mime-type>text/html</mime-type></default><mime-mapping><extension>zip</extension><mime-type>application/zip</mime-…

Linux常見英文報錯中文翻譯(菜鳥必知)

Linux常見英文報錯中文翻譯(菜鳥必知)1.command not found 命令沒有找到2.No such file or directory 沒有這個文件或目錄3.Permission denied 權限不足4.No space left on device 磁盤沒有剩余空間5.File exists 文件已經存在6.Is a directory 這是1個目錄7.Not a directory 不…

阿里開源分布式事務seata帶你入門

介紹 Seata 是阿里巴巴開源的分布式事務中間件&#xff0c;一種分布式事務解決方案&#xff0c;具有高性能和易于使用的微服務架構。 1:對業務無侵入&#xff1a;即減少技術架構上的微服務化所帶來的分布式事務問題對業務的侵入 2:高性能&#xff1a;減少分布式事務解決方案…

exec族函數、system函數、popen函數、PATH

exec族函數函數的作用&#xff1a; 我們用fork函數創建新進程后&#xff0c;經常會在新進程中調用exec函數去執行另外一個程序。當進程調用exec函數時&#xff0c;該進程被完全替換為新程序&#xff08;在exec都后面的代碼不會被得到執行&#xff09;。因為調用exec函數并不創建…

jquery.validate.unobtrusive的使用

應用 一、引入 <script src"Scripts/jquery-1.7.1.min.js"></script> <script src"Scripts/jquery.validate.js"></script> <script src"Scripts/jquery.validate.unobtrusive.js"></script> 二、1&#xf…

Linux操作系統六大優點

??作者主頁&#xff1a;IT技術分享社區 ??作者簡介&#xff1a;大家好,我是IT技術分享社區的博主&#xff0c;從事C#、Java開發九年&#xff0c;對數據庫、C#、Java、前端、運維、電腦技巧等經驗豐富。 ??個人榮譽&#xff1a; 數據庫領域優質創作者&#x1f3c6;&#x…

[webview] 放大縮小的問題

http://www.cocoachina.com/bbs/read.php?tid33249轉載于:https://www.cnblogs.com/zxykit/p/5274831.html

進程間通信IPC(一)(半雙工管道和消息隊列)

引言&#xff1a; 之前學習的進程之間交換信息的方法只能由fork或exec傳送打開文件&#xff0c;或者文件系統。但是這種通訊方式有局限性&#xff0c;接下來將說明進程之間相互通信的其他技術——IPC(InterProcessCommunication)&#xff0c;過去UNIX系統IPC是各種進程間通信方…

Seata相關概念

相關概念 XID&#xff1a;一個全局事務的唯一標識 Transaction Coordinator (TC)&#xff1a; 事務協調器&#xff0c;維護全局事務的運行狀態&#xff0c;負責協調并驅動全局事務的提交或回滾&#xff08;可以理解為事務的協調者&#xff09;。 Transaction Manager (TM)&…

VSS配置

http://www.cnblogs.com/FreeDong/articles/2193151.html轉載于:https://www.cnblogs.com/lacey/p/5275514.html

Program terminated with signal SIGSEGV, Segmentation fault.

問題&#xff1a; 在程序運行時出現了&#xff1a;Segmentation fault (core dumped)&#xff0c;分段故障(堆芯轉儲)也就是段錯誤。 我首先在一篇博客上面找到如何使用gdb調試&#xff1a; 1、首先使用ulimit -a查看你的core file size是否為0.如果不是的話就請跳到步驟3&am…