日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

标准 I/O (带缓冲)

發布時間:2024/4/15 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 标准 I/O (带缓冲) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

標準IO中分文本流和二進制流

  windows系統中:(1) 二進制流 - 換行符 '\n'? ? (2) 文本流 - 換行符 ‘\r' '\n'

  linux 系統中:不區分文本流和二進制流:換行符 - '\n'

?

?

?

?

?

一 。標準I/O 提供3種類型的緩沖(流的緩沖)

  1. 行緩沖(大小1024字節);刷新行緩存的方法 (1)程序正常結束,(2)行緩沖區滿,(3)遇到 '\n'? ,(4)使用fflush函數

  2. 全緩沖(大小4096字節);刷新全緩存的方法 (1)程序正常結束,(2)行緩沖區滿,(3)使用fflush函數;?

  3. 不帶緩存;標準IO庫不對字符進行緩沖,例如標準出錯stderr

?

二 。系統分配的3個流:?

標準輸入 stdin; 標準輸出? stdout? ?; 標準錯誤? stderr ;(標準I/O預定義3個流,當進程創建或者開啟的時候,系統就會先分配三個流指針)

?

三 。文本流:?

通過 FILE 創建一個流指針實現對文本流的操作

打開一個文本的mode參數選擇

?

?頭文件 <stdio.h>

1. 流的打開:FILE * fopen(const *char path, const char *mode)? ; 參數,文件的路徑和打開的模式(只讀,只寫等) , 返回這個文本的指針,可對這個文本流進行讀寫操作等。

2. 流的關閉:int fclose( FILE *stream ); 參數要關閉的文本流,失敗返回EOF(-1) ,成功返回 0?

3. 向流中寫入一個字符 : int fputc(int c, FILE *stream);? ?參數要輸出的字符,和輸出到那個流中(可以是標準流,文本流), 失敗返回EOF, 成功返回 寫入的字符

4. 從流中讀取一個字符:?int fgetc(FILE *stream);? 參數 在那個流中讀取字符,返回讀取的字符(ascii對應

6. 從流中讀取多個字符:?char *fgets(char *s, int size, FILE *stream);? 參數 s 存放讀取的數據, size 讀取多少個字符,stream?從哪個流讀取的流指針;成功返回 s,失敗返回NULL

7. 向流中寫入多個字符:int fputs(const char *s, FILE *stream); 參數,把 s 中的數據寫入到stream指向的流中,成功返回1 失敗返回-1

8. 刷新緩存:?int fflush(FILE *stream);? ?參數,要刷新的流 成功返回0,失敗返回EOF

?

例子1:從終端輸入獲取字符,然后寫到文本中

#include <stdio.h>int main(int argc, const char *argv[]) {char buf[1024] = {0}; //定義緩沖區,從終端獲取數據,往文本流中寫入 #if 0//向終端輸出puts("HHHHHHHH");fputs("HAHGAGAGAGAGA\n",stdout); //輸出到標準輸出流中,(輸出到終端上) #endif//終端獲取數據放到 buf 中,一會把 buf 中的內容寫到文本流中char ch=0;int i=0;while((ch=getchar())!='q' && i<1024) //終端輸入遇到 q 或者 到達最大緩存,結束輸入 {buf[i++] = ch;}#if 1//向文本中輸出FILE *fp = NULL; if((fp = fopen(argv[1],"w")) == NULL) //參數 "w" 表示寫入,每次打開文件先清空文件,再寫入數據 {perror("open fail:");//標準錯誤輸出return -1;}//把 buf 中的數據寫入到 fp 指向文本流中fputs(buf,fp);//把數據寫入文本流中, fgets 不帶換行符輸入到文本流中fclose(fp); //關閉文本流 #endifreturn 0; }

測試結果:

?

?

?

例子2,從文本流中讀取數據

#include <stdio.h>int main(int argc, const char *argv[]) {char buf[1024] = {0};//定義 存放讀取的數據 FILE *fp = NULL;if((fp=fopen(argv[1],"r")) ==NULL){perror("open fail:");}// fgets 只讀取一行的指定個數的內容//循環把文本流中的數據讀完while((fgets(buf,5,fp)) != NULL)//讀取全部數據{printf("%s",buf); //打印讀取到的數據}fclose(fp);return 0; }

?

?

四 。 出錯處理

1.? 頭文件<stdio.h>? ??void perror(const char *s);? ? 參數輸出到終端的提示語,后面會跟著打開錯誤錯誤類型提示

2.? 頭文件<string.h>? ?char *strerror(int errnum);? ? 參數??errnum 錯誤號,錯誤原因的信息

?

轉載于:https://www.cnblogs.com/electronic/p/10907403.html

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的标准 I/O (带缓冲)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。