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

首頁 > 系統(tǒng) > Unix > 正文

《Unix環(huán)境高級(jí)編程》讀書筆記 第5章-標(biāo)準(zhǔn)I/O流

2024-06-28 13:24:56
字體:
供稿:網(wǎng)友
《Unix環(huán)境高級(jí)編程》讀書筆記 第5章-標(biāo)準(zhǔn)I/O流1. 引言
  • 標(biāo)準(zhǔn)I/O庫由ISO C標(biāo)準(zhǔn)說明,由各個(gè)操作系統(tǒng)實(shí)現(xiàn)
  • 標(biāo)準(zhǔn)I/O庫處理很多細(xì)節(jié),如緩沖區(qū)分配、以優(yōu)化的塊長度執(zhí)行I/O等。這些處理使用戶不必?fù)?dān)心如何使用正確的塊長度,這使得它便于用于使用,但是如果不深入地了解I/O庫函數(shù)的操作,也會(huì)帶來一些問題。
2. 流和FILE對(duì)象
  • 第3章中,所有I/O函數(shù)都是圍繞文件描述符的;對(duì)于標(biāo)準(zhǔn)I/O庫,它們的操作是圍繞流FILE *進(jìn)行的,稱其為文件指針
  • FILE對(duì)象通常是一個(gè)結(jié)構(gòu),它包括了標(biāo)準(zhǔn)I/O庫為管理該流需要的所有信息,包括用于實(shí)際I/O的文件描述符、指向用于該流緩沖區(qū)的指針、緩沖區(qū)的長度、當(dāng)前在緩沖區(qū)中的字符數(shù)以及出錯(cuò)標(biāo)志等。

  • 標(biāo)準(zhǔn)I/O文件流可用于單字節(jié)或多字節(jié)(“寬”)字符集。

  • 流的定向決定了所讀、寫的字符是單字節(jié)還是多字節(jié)的。當(dāng)一個(gè)流最初被創(chuàng)建時(shí),它并沒有定向。若在為定向的流上使用一個(gè)多字節(jié)I/O函數(shù),則將流的定向設(shè)置為寬定向的;若在為定向的流上使用一個(gè)單字節(jié)I/O函數(shù),則將流的定向設(shè)置為字節(jié)定向的。
  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
  • 根據(jù)mode參數(shù)的不同字,fwide函數(shù)執(zhí)行不同的工作。
    1. mode為負(fù),則字節(jié)定向;
    2. mode為正,則寬定向;
    3. mode為0,則不設(shè)置流的定向,fwide返回標(biāo)識(shí)該流定向的值
  • 注意,fwide并不改變已定向流的定向
3. 標(biāo)準(zhǔn)輸入、標(biāo)準(zhǔn)輸出、標(biāo)準(zhǔn)錯(cuò)誤
  • 3個(gè)標(biāo)準(zhǔn)I/O流通過預(yù)定義文件指針(即FILE *) stdin、stdout、stderr加以引用。
4. 緩沖
  • 標(biāo)準(zhǔn)I/O庫提供緩沖的目的是盡可能減少使用read和write調(diào)用的次數(shù)。它對(duì)每個(gè)I/O流自動(dòng)地進(jìn)行緩沖管理,從而避免了應(yīng)用程序需要考慮這一點(diǎn)所帶來的麻煩。遺憾的是,標(biāo)準(zhǔn)I/O庫最令人迷惑的也是它的緩沖。

  • 標(biāo)準(zhǔn)I/O提供了以下3種類型的緩沖:

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

    • 當(dāng)且僅當(dāng)標(biāo)準(zhǔn)輸入和標(biāo)準(zhǔn)輸出并不指向交互式設(shè)備時(shí),它們才是全緩沖的
    • 標(biāo)準(zhǔn)錯(cuò)誤決不會(huì)是全緩沖的
  • 很多系統(tǒng)默認(rèn)使用下列類型的緩沖:

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

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

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

    1. 每次一個(gè)字符的I/O
    2. 每次一行的I/O
    3. 直接I/O(二進(jìn)制I/O、面向記錄的I/O、一次一個(gè)對(duì)象的I/O)
  • 在大多數(shù)實(shí)現(xiàn)中,為每個(gè)流在FILE對(duì)象中維護(hù)了兩個(gè)標(biāo)志:

    1. 出錯(cuò)標(biāo)志
    2. 文件結(jié)束標(biāo)志
  • 區(qū)分是出錯(cuò)還是到達(dá)文件尾端,因?yàn)檫@兩種情況下返回值相同

  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); // 調(diào)用clearerr可以清除這兩個(gè)標(biāo)志
7. 每次一個(gè)字符的I/O
  • 輸入函數(shù)
  1. #include <stdio.h>
  2. int getc(FILE *fp); // 可被實(shí)現(xiàn)為宏,故參數(shù)不應(yīng)當(dāng)是具有副作用的表達(dá)式;返回值是int,因?yàn)槌A縀OF是-1
  3. int fgetc(FILE *fp); // 一定是個(gè)函數(shù)
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
国产又大又黄又粗又爽| 亚洲成人看片| 波多野结衣国产精品| 免费不卡中文字幕在线| 久久久午夜影院| 中文字幕视频精品一区二区三区| 国产尤物一区二区| 综合在线亚洲| 97超碰在线公开在线看免费| 好看不卡的中文字幕| 国产精品网红直播| 日本精品久久久久久| **爰片久久毛片| 成人www视频网站免费观看| 亚洲这里只有精品| 欧美日韩一区二区三| 爱福利一区二区| 东京热无码av男人的天堂| 久久se精品一区精品二区| 亚洲精品国产电影| 国产精彩视频一区二区| 精品国产一区二区三区麻豆小说| www.97视频| 色一情一乱一区二区| 毛片在线网站| 亚洲欧美小视频| 欧美一二三四五区| 亚洲国产精品一区二区三区| 国产欧美精品一区| 精品福利一区二区三区免费视频| 久热综合在线亚洲精品| yiren22亚洲综合| av 日韩 人妻 黑人 综合 无码| 老鸭窝一区二区| 在线观看v片| 忘忧草精品久久久久久久高清| 久草视频国产| 亚洲黄色片视频| 亚州av乱码久久精品蜜桃| 国产精品免费在线播放| 欧美性高潮床叫视频| 无码黑人精品一区二区| 11024精品一区二区三区日韩| 国产亚洲一区二区三区在线播放| 欧美a级成人淫片免费看| 乌克兰美女av| 在线观看黄色小视频| 欧美高清一级片在线| 麻豆成人久久精品二区三区小说| 欧美日韩亚洲在线观看| 亚洲成a天堂v人片| 日日摸夜夜添夜夜添毛片av| 97超超碰碰| 香蕉乱码成人久久天堂爱免费| 久久精品国产露脸对白| 在线观看一区视频| 中文字幕一区二区三区人妻| 黄瓜视频网站| 一级特黄aaa大片| 久久综合网色—综合色88| 999精品视频| 天天色天天干天天色| 催眠调教后宫乱淫校园| 中文字幕伦理片| 日韩一级中文字幕| 欧美大喷水吹潮合集在线观看| 无吗不卡中文字幕| 欧美xxx.com| 日韩精品视频免费专区在线播放| 三级欧美在线一区| 欧美一级日韩不卡播放免费| 综合色天天鬼久久鬼色| 国产精品久久久久7777婷婷| 日本一二三视频| 99精品视频在线播放观看| 综合欧美亚洲日本| 欧美性猛交xxxxxx富婆| 国产一级不卡视频| 国产一区二区精品福利地址| 国产精品久久久国产盗摄| 亚洲先锋影音| 91精品国偷自产在线电影| 成人免费视频91| 96精品久久久久中文字幕| 琪琪五月天综合婷婷| 人妻无码视频一区二区三区| 成人xxx免费视频播放| 狠狠v欧美ⅴ日韩v亚洲v大胸| 亚洲黄网站在线观看| 人人干人人干| 久久精品五月天| 欧美aaaaa性bbbbb小妇| 免费污污视频在线观看| 中文字幕一区二区久久人妻| 中国特黄一级片| 欧美日韩一区二区在线播放| 一本色道久久综合狠狠躁篇怎么玩| 最近2019中文免费高清视频观看www99| 日韩在线网址| 91精品福利视频| 免费av大全| 欧美xxxxxxxx| jjzz在线观看| 日韩大片在线观看| 精品亚洲aⅴ乱码一区二区三区| 黄色大片免费观看| 国产免费久久精品| 一本一道无码中文字幕精品热| 国产97在线视频| 国产精品都在这里| 337p日本欧洲亚洲大胆精品| 韩国成人动漫在线观看| 国产精品一区二区三区四区在线观看| 亚洲中文字幕在线一区| 色一情一乱一区二区三区| 在线观看h视频| 妺妺窝人体色www在线观看| 日韩欧美精品一区| 久久99视频精品| 992tv在线成人免费观看| 欧美高清一区二区| 亚洲国产中文在线| 亚洲国产精品久久久久久| 麻豆久久久久久久| 日韩一区二区免费看| 国产精品无码电影| 网站一区二区| 无国产精品白浆是免费| 日韩 欧美 高清| 亚洲精品一区二区三区新线路| 欧美重口另类videos人妖| 亚洲黄色尤物视频| 欧美大胆人体bbbb| 国产欧美精品xxxx另类| 91免费小视频| 国产福利91精品一区| 伊人国产精品| 91免费视频播放| 视频三区在线观看| 懂色一区二区三区免费观看| 日韩激情av在线| 在线观看精品自拍视频| fc2成人免费人成在线观看播放| 欧洲精品久久一区二区| 欧美性猛交久久久乱大交小说| 不卡一区2区| 国产精品乱人伦中文| 97精品资源在线观看| 中文亚洲av片在线观看| 久色视频在线| 青青草在线视频免费观看| 国产精品v欧美精品v日本精品动漫| 色偷偷中文字幕| 欧美在线综合视频| 国产一区二区视频在线免费观看| 国产精品夫妻自拍| 国产黄色片免费看| 亚洲色图综合久久| 欧美色图一区| 亚洲欧洲免费| 91视频精品在这里| 欧美激情视频在线观看| 欧美一区二区三区视频在线观看| 米奇.777.com| 亚洲h视频在线观看| 一区精品在线播放| 日本aa在线观看| 国产免费黄视频在线观看| 国外成人在线播放| 精品国产一区二区三区噜噜噜| 国产一区二区三区毛片| 久久精品夜夜夜夜夜久久| 日本一二三区不卡| 亚洲视频欧洲视频| 欧美精品1区2区3区| 国产精品久久久久福利| 日本一卡二卡四卡精品| 精品视频免费看| caoporn视频在线| 人猿泰山h版在线观看| 日本免费在线一区| 日韩av中文字幕第一页| 丝袜美腿亚洲一区| 欧美日韩性视频| 牛牛精品视频在线| 久久久久无码精品国产sm果冻| 国产专区自拍| 精品国产三级电影在线观看| 成人免费视频网站入口::| 亚洲欧美综合国产精品一区| 国产高清视频色在线www| 亚洲精品乱码久久久久久久| 日韩乱码人妻无码中文字幕| 性久久久久久久久久久久| 国产精品欧美日韩一区| 免费网站观看www在线观| 婷婷综合激情网| 日本妇乱大交xxxxx| 在线亚洲国产精品网站| 色94色欧美一区| 国产在线91| 日本一区二区欧美| 午夜不卡一区| 国产一区第一页| 日韩欧美三级一区二区| 成人在线手机视频| 天干夜夜爽爽日日日日| 欧美国产日本在线| 国产精品av在线| 色偷偷av男人的天堂| 男人添女人下部高潮视频在观看| 亚洲图区在线| 日韩精品一区二区三区四区五区| 久久久爽爽爽美女图片| 亚洲欧洲二区| 国产精品视频不卡| 欧美日一区二区三区在线观看国产免| 国产人成高清视频观看| 国产一区二区成人久久免费影院| 亚洲精品国产欧美在线观看| 九九热视频在线免费观看| 波多野结衣在线观看一区二区| 亚洲成人免费网站| 日韩伦理片在线观看| 亚洲丶国产丶欧美一区二区三区| 国产精品一区二区三区四区五区| aaa日本高清在线播放免费观看| 久久精品国产亚洲777| 国产性生交xxxxx免费| 欧美videosex性极品hd| 婷婷开心激情综合| 久久影视三级福利片| www国产无套内射com| 欧美日韩在线观看视频| 国产精品无码永久免费不卡| 国产三级aaa| 中文字幕视频在线免费观看| 精品露脸国产偷人在视频| 免费成人进口网站| 欧美一级片久久久久久久| 午夜天堂在线观看| 亚洲欧美日本一区| 欧美日韩国产成人在线观看| 国产高清精品二区| 成人av男人的天堂| 国产欧美视频一区| 国产专区在线播放| 夫妇交换中文字幕| 少妇av在线| 亚洲精品中文字| 91精品国产一区二区三区| 中文字幕日韩欧美精品高清在线| 欧美特黄视频| 免费在线观看av网站| 毛片基地在线观看| 中文字幕中文乱码欧美一区二区| 亚洲精品老司机| 一道精品一区二区三区| 1024国产在线| 大又大又粗又硬又爽少妇毛片| 91精品久久久| 国产精品综合av一区二区国产馆| 国产色视频一区二区三区qq号| 一区不卡视频| 一本色道久久88亚洲精品综合| 亚洲精品在线视频观看| 撸视在线观看免费视频| 日韩欧美在线视频观看| 亚洲专区在线视频| 亚洲国产精品18久久久久久| 一本色道久久综合亚洲aⅴ蜜桃| 久久最新资源网| 久久久久久久久久久亚洲| 网站在线观看你懂的| 另类中文字幕网| 日产国产高清一区二区三区| 免费污网站在线观看| 中文字幕在线免费播放| 性色av蜜臀av浪潮av老女人| 久久不见久久见中文字幕免费| a毛片在线免费观看| 色免费在线视频| 老司机精品影院| 都市激情久久久久久久久久久| 色狠狠av一区二区三区| 亚洲精品一区二区三区影院忠贞| chinese叫床对白videos| 午夜影院免费看| 国产97免费视频| 国内精品久久99人妻无码| 成人免费无码av| 91动漫在线| 国产高潮国产高潮久久久91| 九九在线精品视频| 国产红桃视频| 欧美性猛交一区二区三区| 乱一区二区av| 成人欧美一区二区三区在线| 欧美aaaaa成人免费观看视频| 国产精品手机在线播放| 免费激情视频网站| 欧美日韩精品三区| 六月丁香色婷婷| 久久精品香蕉视频| www.日韩不卡电影av| xxx视频在线观看| 99超碰麻豆| 国产精品高潮呻吟久久| 国产午夜精品视频一区二区三区| 国产精品一区二区性色av| 国产精品久久久久久久久久久新郎| 2019一级黄色毛片免费看网| 午夜久久久久| 蜜桃传媒视频第一区入口在线看| 波多野结衣欲乱| 国产真实乱全部视频| 秋霞成人影院| 中文字幕免费在线看| 在线精品亚洲| 国产亚洲精品高潮| av在线资源观看| 欧美性开放视频| 国产精品久久久久久久久久免费看| 国产一区二区三区中文| 美女免费观看一区二区三区| 亚洲国产成人精品久久久国产成人一区| 天堂在线国产| 国产乱人伦偷精品视频免下载|