99偷拍视频精品区一区二,口述久久久久久久久久久久,国产精品夫妇激情啪发布,成人永久免费网站在线观看,国产精品高清免费在线,青青草在线观看视频观看,久久久久久国产一区,天天婷婷久久18禁,日韩动漫av在线播放直播

基礎IO——緩沖區-創新互聯

文章目錄
  • 1. 緩沖區理解
    • 1.1 緩沖區在哪里
    • 1.2 刷新策略
  • 2. 標準輸出和標準錯誤
    • 2.1 模擬perror

創新互聯公司服務項目包括西秀網站建設、西秀網站制作、西秀網頁制作以及西秀網絡營銷策劃等。多年來,我們專注于互聯網行業,利用自身積累的技術優勢、行業經驗、深度合作伙伴關系等,向廣大中小型企業、政府機構等提供互聯網行業的解決方案,西秀網站推廣取得了明顯的社會效益與經濟效益。目前,我們服務的客戶以成都為中心已經輻射到西秀省份的部分城市,未來相信會繼續擴大服務區域并繼續獲得客戶的支持與信任!1. 緩沖區理解

什么是緩沖區呢?
緩沖區的本質:就是一段內存

為什么要有緩沖區呢?
大家在日常生活中,如果我們想寄東西給朋友,我們會先到快遞站去寄。如果沒有快遞站,我們自己去寄,那么就會耽誤自己的時間。那么這個緩沖區就相當于快遞站,我們就相當于進程,你的朋友就是外設。緩沖區第一個作用:為了解放使用緩沖區的進程的時間。

緩沖區第二個作用:可以集中處理數據刷新,減少IO的次數,從而達到提高整機的效率的目的。

1.1 緩沖區在哪里

看下面的例子:
在這里插入圖片描述
運行結果如下:
在這里插入圖片描述
然后我們再看這樣的:
在這里插入圖片描述
運行結果如下:
在這里插入圖片描述
在這里插入圖片描述

為什么會是這個現象,printf為什么一開始不顯示了?
我們知道:printf里面的數據沒有立即打印出來,是這些數據在緩沖區里了。
但是write是立即刷新了,printf沒有立即刷新。而printf里面是封裝了write,所以這個緩沖區一定不在write內部,不是內核級別的。那么這個緩沖區只能是C語言提供。

我們知道:在stdout中,它是FILE*的,所以是一個結構體。它里面就封裝了語言級別的緩沖區。
在這里插入圖片描述
我們在使用這些C庫里面的函數時,首先并不是直接調用write函數。而是先存到FILE里的緩沖區,然后當這個緩沖區滿了的時候,再去調用write函數。

1.2 刷新策略

如果在刷新之前,關閉了fd會有什么問題?
在這里插入圖片描述
我們把stdout里的fd關上,看一下運行什么情況?
在這里插入圖片描述
這個情況就說明了,我們在使用C庫里面的函數時,并沒有及時調用write,而是先存到緩沖區里。我們把fd關上了,write就不能使用了,所以就不會刷新出來。

既然緩沖區在FILE內部,在C語言中,每打開一次文件,就會有一個FILE*返回。那就說明,每一個文件都有一個fd和屬于它自己的語言級別的緩沖區。

刷新的幾種常見情況:
常規:
1.無緩沖(立即刷新)。
2.行緩沖(逐行刷新),一般是顯示器文件。
3.全緩沖(緩沖區滿,刷新),一般是塊設備對應的文件,也就是磁盤文件。

特殊:
1.進程退出
2.用戶強制刷新

看下面的例子:
在這里插入圖片描述
在這里插入圖片描述
這里第一個很好解釋,write不用解釋了,因為它直接刷新出來。而三個C庫函數是往顯示器打印,所以是行刷新,而這三個都帶了\n,所以直接刷新出來了。

第二個是什么情況呢?write不用解釋,直接刷新。但C庫函數都打印了兩次,是為什么?
因為我們重定向到了log.txt,是磁盤文件。所以是全刷新。所以這些C庫函數并沒有刷新,而是先保留在緩沖區里。然后fork之后,進程結束,父子進程開始刷新緩沖區。

緩沖區,是自己的FILE內部維護的,屬于父進程內部的數據區域。而刷新的本質,是把緩沖區的數據write到OS內部,清空緩沖區。所以,當任意一方試圖寫入,便以寫時拷貝的方式各自一份副本。
所以會打印兩次。

2. 標準輸出和標準錯誤

在這里插入圖片描述
這里C++的命名方式可以有.cpp,.cc,.cxx三種方式。

我們看一下運行結果:
在這里插入圖片描述
這是為什么呢?我們知道:標準輸出是1,標準錯誤是2。雖然它們都指向通一個硬件,但是不同的fd,所以它們互不影響。在這里,只是對1號文件符重定向,和2號沒有關系。

如果我們想把二者重定向到各自文件,怎么辦呢?
在這里插入圖片描述
那么,這樣的意義是什么呢?
可以區分哪些是程序日常輸出,哪些是錯誤。方便我們去觀察。

如果我們就想混在一起打印呢?
在這里插入圖片描述
首先,重定向到新文件,說明1和3都指向了all.txt。然后2>&1的意思就是將1的內容拷貝到2,所以1,2,3,都指向了all.txt。
在這里插入圖片描述
那么這個Success又是什么意思呢?
C語言有一個全局變量,記錄最近一次C庫函數調用失敗的原因。這個變量就是errno。
在這里插入圖片描述

2.1 模擬perror

在這里插入圖片描述
運行結果如下:
在這里插入圖片描述
結果和perror是一樣的。

你是否還在尋找穩定的海外服務器提供商?創新互聯www.cdcxhl.cn海外機房具備T級流量清洗系統配攻擊溯源,準確流量調度確保服務器高可用性,企業級服務器適合批量采購,新人活動首月15元起,快前往官網查看詳情吧

分享標題:基礎IO——緩沖區-創新互聯
文章地址:http://www.yijiale78.com/article0/cesioo.html

成都網站建設公司_創新互聯,為您提供網站策劃全網營銷推廣網站設計微信公眾號做網站面包屑導航

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

網站建設網站維護公司