亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > Unix > 正文

《Unix環境高級編程》讀書筆記 第5章-標準I/O流

2024-06-28 13:24:56
字體:
來源:轉載
供稿:網友
《Unix環境高級編程》讀書筆記 第5章-標準I/O流1. 引言
  • 標準I/O庫由ISO C標準說明,由各個操作系統實現
  • 標準I/O庫處理很多細節,如緩沖區分配、以優化的塊長度執行I/O等。這些處理使用戶不必擔心如何使用正確的塊長度,這使得它便于用于使用,但是如果不深入地了解I/O庫函數的操作,也會帶來一些問題。
2. 流和FILE對象
  • 第3章中,所有I/O函數都是圍繞文件描述符的;對于標準I/O庫,它們的操作是圍繞流FILE *進行的,稱其為文件指針。
  • FILE對象通常是一個結構,它包括了標準I/O庫為管理該流需要的所有信息,包括用于實際I/O的文件描述符、指向用于該流緩沖區的指針、緩沖區的長度、當前在緩沖區中的字符數以及出錯標志等。

  • 標準I/O文件流可用于單字節或多字節(“寬”)字符集。

  • 流的定向決定了所讀、寫的字符是單字節還是多字節的。當一個流最初被創建時,它并沒有定向。若在為定向的流上使用一個多字節I/O函數,則將流的定向設置為寬定向的;若在為定向的流上使用一個單字節I/O函數,則將流的定向設置為字節定向的。
  1. #include <stdio.h>
  2. #include <wchar.h>
  3. int fwide(FILE *fp, int mode);
  4.   Returns: positive if stream is wide oriented, negative if stream is byte oriented, or 0 if stream has no orientation
  • 根據mode參數的不同字,fwide函數執行不同的工作。
    1. mode為負,則字節定向;
    2. mode為正,則寬定向;
    3. mode為0,則不設置流的定向,fwide返回標識該流定向的值
  • 注意,fwide并不改變已定向流的定向
3. 標準輸入、標準輸出、標準錯誤
  • 3個標準I/O流通過預定義文件指針(即FILE *) stdin、stdout、stderr加以引用。
4. 緩沖
  • 標準I/O庫提供緩沖的目的是盡可能減少使用read和write調用的次數。它對每個I/O流自動地進行緩沖管理,從而避免了應用程序需要考慮這一點所帶來的麻煩。遺憾的是,標準I/O庫最令人迷惑的也是它的緩沖。

  • 標準I/O提供了以下3種類型的緩沖:

    1. 全緩沖。在填滿標準I/O緩沖區后才進行實際I/O操作。對于駐留在磁盤上的文件通常由標準I/O庫實施全緩沖。緩沖區可由標準I/O例程自動地沖洗(flush),也可通過調用函數fflush沖洗一個流。
      • 術語flush有兩種意思:在標準I/O庫方面,flush(沖洗)意味著緩沖區中的內容寫到磁盤上;在終端驅動程序方面,flush(刷清)表示丟棄已存儲在緩沖區中的數據。
    2. 行緩沖。當輸入或輸出中遇到換行符時,標準I/O庫執行I/O操作。當流涉及一個終端時,通常使用行緩沖。
      • 對于行緩沖有兩個限制:
        1. 只要填滿了緩沖區,即使還沒遇到換行符,也進行I/O操作;
        2. 任何時候只要通過標準I/O庫要求從(a)一個不帶緩沖的流,或者(b)一個行緩沖的流得到輸入數據,那么就會flush所有行緩沖輸出流。
    3. 不帶緩沖。標準I/O庫不對字符進行緩沖存儲。如fputs函數。標準錯誤流stderr通常是不帶緩沖的。
  • ISO C要求下列緩沖特征:

    • 當且僅當標準輸入和標準輸出并不指向交互式設備時,它們才是全緩沖的
    • 標準錯誤決不會是全緩沖的
  • 很多系統默認使用下列類型的緩沖:

    • 標準錯誤是不帶緩沖的
    • 若是指向終端設備的流,則是行緩沖的;否則是全緩沖的
  1. #include <stdio.h>
  2. void setbuf(FILE *restrict fp, char *restrict buf );
  3. // 使用該函數打開或關閉緩沖機制。參數buf必須指向一個長度為BUFSIZ的緩沖區;或為NULL以關閉緩沖
  4. int setvbuf(FILE *restrict fp, char *restrict buf, int mode, size_t size);
  5. Returns: 0 if OK, nonzero on error
  • 上面兩個函數必須在流被打開后,且對流執行任何一個其他操作之前調用
  • mode參數:_IOFBF全緩沖、_IOLBF行緩沖、_IONBF不帶緩沖
  • 如果指定全緩沖或行緩沖,則buf和size可選擇地指定一個緩沖區及其長度。若流帶緩沖而buf是NULL,則標準I/O庫將自動地為該流分配適當長度的緩沖區。
  1. #include <stdio.h>
  2. int fflush(FILE *fp); // 若fp為NULL,則導致所有輸出流被沖洗
  3.   Returns: 0 if OK, EOF on error
5. 打開流
  • 下列3個函數打開一個標準I/O流
  1. #include <stdio.h>
  2. FILE *fopen(const char *restrict pathname, const char *restrict type);
  3. FILE *freopen(const char *restrict pathname, const char *restrict type, FILE *restrict fp);
  4. // 在一個指定的流上打開一個指定的文件,如若該流已經打開,則先關閉該流
  5. FILE *fdopen(int fd, const char *type); // 取一個已有的文件描述符,并使一個標準的I/O流與該描述符相結合
  6.   All three return: file pointer if OK, NULL on error
  • 打開標準I/O流的type參數
  • 字符b,代表二進制。但Unix內核并不對文本文件和二進制文件進行區分
  • 注意:在指定w或a類型創建一個新文件時,我們無法說明該文件的訪問權限位;而open和creat可以
  • 如果以讀和寫類型打開一個文件時(type中帶+號),具有下列限制:

    1. 如果中間沒有fflush、fseek、fsetpos或rewind,則在輸出的后面不能直接跟隨輸入
    2. 如果中間沒有fseek、fsetpos或rewind,或者一個輸入操作沒有到達文件尾端,則在輸入操作之后不能直接跟隨輸出
  • 打開一個標準I/O流的6種不同方式

  • 除非流引用終端設備,否則按系統默認,流被打開是全緩沖的。若流引用終端設備,則該流是行緩沖的。
  1. #include <stdio.h>
  2. int fclose(FILE *fp);
  3.   Returns: 0 if OK, EOF on error
  • 當一個進程正常終止時(調用exit或從main函數返回),則所有帶未寫緩沖數據的標準I/O流都被沖洗,所有打開的標準I/O流都被關閉。
6. 讀和寫流
  • 一旦打開了流,可在3種不同類型的非格式化I/O中進行選擇,對其進行讀、寫操作

    1. 每次一個字符的I/O
    2. 每次一行的I/O
    3. 直接I/O(二進制I/O、面向記錄的I/O、一次一個對象的I/O)
  • 在大多數實現中,為每個流在FILE對象中維護了兩個標志:

    1. 出錯標志
    2. 文件結束標志
  • 區分是出錯還是到達文件尾端,因為這兩種情況下返回值相同

  1. #include <stdio.h>
  2. int ferror(FILE *fp);
  3. int feof(FILE *fp);
  4.   Both return: nonzero (true) if condition is true, 0 (false) otherwise
  5. void clearerr(FILE *fp); // 調用clearerr可以清除這兩個標志
7. 每次一個字符的I/O
  • 輸入函數
  1. #include <stdio.h>
  2. int getc(FILE *fp); // 可被實現為宏,故參數不應當是具有副作用的表達式;返回值是int,因為常量EOF是-1
  3. int fgetc(FILE *fp); // 一定是個函數
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲一区二区三区sesese| 91精品国产高清自在线| 久久久久免费精品国产| 精品久久久久久亚洲国产300| 国产成人精品一区二区在线| 在线观看欧美日韩| 国内精品久久久久影院优| 欧美日韩在线看| 最近免费中文字幕视频2019| 欧美成aaa人片免费看| 国产成人综合一区二区三区| 国产偷国产偷亚洲清高网站| 国产一区二区三区丝袜| 国产成人黄色av| 成人免费高清完整版在线观看| 午夜精品久久久久久99热软件| 亚洲精品国产精品乱码不99按摩| 国产亚洲欧洲在线| 欧美黄色成人网| 91久久精品在线| 欧美怡春院一区二区三区| 国产精品久久久久久婷婷天堂| 成人性生交大片免费看视频直播| 亚洲品质视频自拍网| 久久成年人免费电影| 欧美刺激性大交免费视频| 色天天综合狠狠色| 91精品久久久久久久久久久| 欧美视频二区36p| 91在线高清免费观看| 国产一区二区三区在线免费观看| 精品色蜜蜜精品视频在线观看| 国产精品视频最多的网站| 欧美裸体xxxx极品少妇| 亚洲电影免费观看高清完整版在线观看| 色综合久久悠悠| 国产日本欧美在线观看| 亚洲欧美在线看| 高清欧美性猛交xxxx黑人猛交| 国产精品日日摸夜夜添夜夜av| 欧美中文字幕在线播放| 国产精品免费网站| 亚洲欧洲一区二区三区在线观看| 亚洲综合日韩中文字幕v在线| 最近中文字幕mv在线一区二区三区四区| 亚洲综合色av| www.午夜精品| 日本久久久久久久久| 国产一区二区三区精品久久久| 欧美大片免费观看在线观看网站推荐| 在线观看日韩视频| 亚洲区免费影片| 国产97在线|日韩| 亚洲欧洲黄色网| 亚洲美女久久久| 两个人的视频www国产精品| 久久99精品久久久久久青青91| 中国日韩欧美久久久久久久久| 中文字幕亚洲二区| 伊人久久久久久久久久久| 欧美激情18p| 亚洲精品久久久久久久久| 81精品国产乱码久久久久久| 国产精品69久久久久| 91精品久久久久久综合乱菊| www.日本久久久久com.| 欧美性精品220| 欧美日韩一二三四五区| 欧美日韩在线第一页| 日韩在线视频观看| 欧美久久精品午夜青青大伊人| 久久国产精品视频| 国产一区二区香蕉| 一区二区三区四区精品| 久久久精品中文字幕| 国产精品一二三在线| 国产精品入口日韩视频大尺度| 久久视频国产精品免费视频在线| 97视频免费在线观看| 1769国内精品视频在线播放| 欧美成人性色生活仑片| 日韩精品免费在线视频观看| 欧美肥老太性生活视频| 粉嫩老牛aⅴ一区二区三区| 精品久久久久久久中文字幕| 精品国产区一区二区三区在线观看| 欧美激情伊人电影| 欧美在线亚洲在线| 亚洲精品国产suv| 日韩电影大全免费观看2023年上| 国产91精品视频在线观看| 在线看欧美日韩| 日韩第一页在线| 高清欧美性猛交xxxx黑人猛交| 亚洲视频在线观看网站| 2019中文字幕全在线观看| 欧美激情在线视频二区| 亚洲精品97久久| 色噜噜狠狠狠综合曰曰曰88av| 国产午夜精品理论片a级探花| 美女撒尿一区二区三区| 国产精品日日做人人爱| 亚洲自拍偷拍视频| 亚洲国产精品悠悠久久琪琪| 久久影视三级福利片| 午夜精品久久久久久久久久久久久| 欧美午夜精品伦理| 久久久免费观看| 欧美精品videossex性护士| 午夜剧场成人观在线视频免费观看| 国产精品影片在线观看| 日韩欧美综合在线视频| 久久五月情影视| 日本亚洲欧洲色α| 国产精品美女免费| 国产自摸综合网| 国产mv久久久| 久久综合88中文色鬼| 国模视频一区二区| 国产精品久久视频| 中文字幕亚洲综合久久| 日韩中文字幕在线观看| 欧美一级大片在线观看| 热re99久久精品国产66热| 国产精品免费观看在线| 欧美做受高潮1| 97精品一区二区三区| 91久久在线播放| 琪琪亚洲精品午夜在线| 亚洲视频在线看| 国产欧美欧洲在线观看| 日韩av黄色在线观看| 国产欧美精品在线播放| 日韩在线一区二区三区免费视频| 国内精品久久久久伊人av| 久久九九热免费视频| 日韩经典一区二区三区| 久久久久久久久久久免费精品| 日韩av免费一区| 国产精品69久久| 亚洲欧洲av一区二区| 亚洲自拍偷拍福利| 日韩精品中文在线观看| 久久久视频在线| 国产日本欧美一区二区三区在线| 国产成人精品最新| 亚洲欧美日韩中文在线制服| 欧美视频在线免费| 欧美色播在线播放| 亚洲一区二区福利| 欧美极品美女视频网站在线观看免费| 国产一区二区三区视频| 欧美视频在线免费| 色777狠狠综合秋免鲁丝| 国产精品成人一区二区三区吃奶| 欧美黑人巨大精品一区二区| 国产91色在线| 亚洲电影免费观看高清完整版在线| 欧美一级大片视频| 久久精品91久久久久久再现| 国产精品成人在线| 中文字幕亚洲欧美一区二区三区| 亚洲精品一区二区网址| 亚洲成色777777女色窝|