色yeye在线视频观看_亚洲人亚洲精品成人网站_一级毛片免费播放_91精品一区二区中文字幕_一区二区三区日本视频_成人性生交大免费看

 

在Linux下IO操作簡述

作者:楊老師,華清遠見教育科技集團講師。

在linux下的C程序編程中對文件的IO操作有標準IO和文件IO兩種操作類型。標準IO是帶緩沖的IO屬于庫函數,文件IO是不帶緩沖的屬于系統調用。系統調用和庫函數之間的區別如下圖1-1


圖 1-1

一、 標準IO

標準IO的緩沖類型分為:全緩沖、行緩沖、不緩沖三種類型。

在標準IO中對文件操作默認是全緩沖的,對于磁盤文件的緩沖區是由標準IO庫中的函數通過malloc來獲得的。

在標準IO中與終端相關的通常是行緩沖,但是如果標準輸入、標準輸出不涉及交互時也可以設成全緩沖。

標準出錯是不帶緩沖的,這樣就可以將出錯信息實時的顯示出來。

這三種緩沖類型可以通過void setbuf(FILE * f p, char * b u f) 和int setvbuf(FILE * f p, char * b u f,  int m o d e,  size_t   s i z e) 這兩個函數進行修改。比如,在linux下標準輸出的行緩沖的大小默認設置為1024個字節,如果你想把它擴大2048個字節,那么就可在應用程序中調用setbuf函數來設置。設置后再向終端進行輸出時如果不加其他刷新條件,那么直到輸出超過2048個字節時數據才會被刷新出來。 而setvbuf函數還可以明確的指定緩沖類型,比如_IOFBF(全緩沖)、_IOLBF(行緩沖)、_IONBF(無緩沖)。

標準IO中的freopen函數是用來將一個流進行重新定向的。如果該流之前已經被重新定向,那么freopen函數將會清除之前的定向并且使用本次定向。通常用來將一個文件打開為stdin、stdout、stderr三個流。

fdopen函數是用來將一個已經打開的文件描述和一個流進行關聯。因為管道和socket套接字等描述符是不可以用標準IO的函數打開的,因此可以調用此函數進行關聯,然后就可以用標準IO的函數進行操作了。

標準IO中gets函數是用來從終端讀入字符串的,因為它并不會檢測字符串的長度,因此如果緩沖的大小設置不合適會導致未知的錯誤。gets函數從終端上讀到的字符串中后一個字符其實是‘\n’字符,然后gets函數又將‘\n’字符轉換成了‘\0’字符,所以gets函數會將后的換行符讀走。

相對于gets函數來說fgets函數是安全的因為它會檢測讀入字符的長度。當使用fgets函數從終端上讀入字符時有兩種情況:

第一種:如果終端上輸入的字符個數小于fgets函數指定的size-1個,那么它也會將終端上‘\n’字符讀走并且在結尾添加上‘\0’字符。

第二種:如果終端上輸入的字符個數大于fgets函數指定的sisz-1個,那么它就不會讀走終端上的‘\n’字符,而且末尾始終會添加‘\0’字符。

二、文件IO

文件IO是不帶緩沖,是因為每個read和write都會調用內核中的系統調用。當使用文件IO的讀寫函數對文件進行操作后,其實數據也并不會實時的寫入磁盤,只是放到了內核緩沖區中,如果該緩沖區沒有寫滿,那么不會將該緩沖區放入到輸出隊列。只有緩沖區滿了或者內核需要該緩沖區,那么才將該緩沖區加入到輸出隊列中,等待其到達隊首時才可以進行實際的IO操作。

在使用open函數打開文件時,如果使用了O_SYNC標志,那么當調用的write函數在返回時就已經將數據寫入到磁盤上了。而如果是調用sync()函數,那么當該函數返回時數據并沒有寫到磁盤上而僅僅是被放到了輸出隊列中。

文件IO中的定位函數lseek可以返回一個負的文件指針偏移,因為對于某些設備文件允許負的偏移量。因此在對lseek函數進行出錯判斷時,不可以用是否小于0,而應該用是否等于-1。當時用lseek函數生成一個空洞文件時,其實文件的空洞部分是不占磁盤塊的。使用ls –ls命令查看兩個字節大小相同但是一個有空洞,一個沒有空洞的文件時會發現,有空洞的文件所占的磁盤塊要少(空洞的大小要足夠大時才可以看到現象),如下圖1-2:


圖 1-2

主站蜘蛛池模板: 精品人妻AV一区二区三区 | 精品国产一卡2卡3卡4卡新区 | 波多野结衣多次高潮三个老人 | 天堂AV无码大芭蕉伊人AV孕妇 | 精品国产AV一二三四区 | 裸男网站gv | 久热欧美 | 亚洲国产精品无码专区 | 亚洲AV人无码激艳猛片服务器 | 中日AV高清字幕版在线观看 | 国产精品成人A片在线果冻 国精产品一线二线三线AV | 成年日韩片av在线网站 | 韩国毛片免费观看 | 18禁黄网站男男禁片免费观看 | 无码一二大地三区 | 麻豆做爰免费观看 | 久久久久亚洲AV无码观看 | 免费无码国产裸体 | 一区二区伊人久久大杳蕉 | 成人无码黄动漫在线播放 | 日韩精品在线视频播放 | 中文字幕人成无码免费视频 | 国产公妇仑乱在线观看 | 久久久噜噜噜久久熟女色 | 欧洲无线一线二线三线区别大吗 | 精品亚洲A∨无码一区二区三区 | 亚洲色,天堂网 | 四虎网站在线 | 黑人大鷄巴XXX高湖 在线视频观看免费视频18 | 色婷婷成人综合激情免费视频 | 国产麻豆精品95视频 | 日本高清免费一本在线观看 | 中国一级黄色片子 | 日本三级免费看 | 久久久久99精品成人片牛牛影视 | 成人影片麻豆国产影片免费观看 | 久久久久人妻一区精品果冻 | 好男人2019视频社区 | 无码人妻精品一区二区三 | 亚洲最大的成人网站 | 章节把亲妺妺强h怀孕小说 夜夜揉揉日日人人青青 |