Linux 主函式和輸出緩衝區

2021-09-25 17:05:23 字數 1978 閱讀 7571

主函式:int main(int argc ,char *ar**,char *envp);

argc:引數列表中引數的個數,乙個程序啟動時,主函式至少會傳遞乙個引數,ar**[0]=啟動這個程序的命令

ar**:給主函式傳遞的引數列表

envp:傳遞的環境變數

1.什麼是緩衝區?

緩衝區是記憶體空間的一部分。也就是說,在記憶體空間中預留了一定的儲存空間,這些儲存空間用來緩衝輸入或輸出的資料,這部分預留的空間就叫做緩衝區,顯然緩衝區是具有一定大小的。緩衝區根據其對應的是輸入裝置還是輸出裝置,分為輸入緩衝區和輸出緩衝區。

2.為什麼會有緩衝區?

高速裝置與低速裝置的不匹配,勢必會讓高速裝置花時間等待低速裝置,我們可以在這兩者之間設立乙個緩衝區,用來存放臨時資料。

緩衝區的作用:

(1)可以解除輸入輸出裝置和計算機cpu之間的制約關係,資料可以直接送往緩衝區,高速裝置不用再等待低速裝置,提高了計算機的效率。例如:我們使用印表機列印文件,由於印表機的列印速度相對較慢,我們先把文件輸出到印表機相應的緩衝區,印表機再自行逐步列印,這時我們的cpu可以處理別的事情。

(2)可以減少資料的讀寫次數,如果每次資料只傳輸一點資料,就需要傳送很多次,這樣會浪費很多時間,因為開始讀寫與終止讀寫所需要的時間很長,如果將資料送往緩衝區,待緩衝區滿後再進行傳送會大大減少讀寫次數,這樣就可以節省很多時間。例如:我們想將資料寫入到磁碟中,不是立馬將資料寫到磁碟中,而是先輸入緩衝區中,當緩衝區滿了以後,再將資料寫入到磁碟中,這樣就可以減少磁碟的讀寫次數,不然磁碟很容易壞掉。

總的來說,緩衝區就是一塊記憶體區,它用在輸入輸出裝置和cpu之間,用來儲存資料。它使得低速的輸入輸出裝置和高速的cpu能夠協調工作,避免低速的輸入輸出裝置占用cpu,解放出cpu,使其能夠高效率工作。

3.printf()並不是往介面上顯示的,而是先放到輸出緩衝區

scanf()從輸入緩衝區中獲取

4.輸出緩衝區重新整理條件(將資料輸出到記憶體中,當滿足以下四個條件時,才會將緩衝區中的資料顯示到介面上):

(1)遇到回車「\n」

(2)程式結束

exit(int ):結束程序時會重新整理緩衝區   

_exit(int ):結束程序直接釋放空間,而不重新整理緩衝區,不執行註冊的的退出函式

atexit(void (*fun)() fun):註冊退出函式,註冊程序退出時呼叫的函式,系統預設能註冊32個函式

(3)主動重新整理fflush(stdout)

(4)緩衝區滿(預設1024位元組)

5.緩衝和快取的區別

cpu的cache,它中文名稱是高速緩衝儲存器,讀寫速度很快,幾乎與cpu一樣。由於cpu的運算速度太快,記憶體的資料訪問速度無法跟上cpu的速度,所以在cpu與記憶體間設定了cache為cpu的資料快取區。當計算機執行程式時,資料與位址管理部件會**可能要用到的資料和指令,並將這些資料和指令預先從記憶體中讀出送到cache。一旦需要時,先檢查cache,若有就從cache中讀取,若無再訪問記憶體,現在的cpu還有一級cache,二級cache。簡單來說,cache就是用來解決cpu與記憶體之間速度不匹配的問題,避免記憶體與輔助記憶體頻繁訪問資料,這樣就提高了系統的執行效率。

緩衝的核心作用是用來緩衝,緩和衝擊。比如你每秒要寫100次硬碟,對系統衝擊很大,浪費了大量時間在忙著處理開始寫和結束寫這兩件事嘛。用個buffer暫存起來,變成每10秒寫一次硬碟,對系統的衝擊就很小,寫入效率高了,極大緩和了衝擊。

快取的核心作用是加快取用的速度。比如你乙個很複雜的計算做完了,下次還要用結果,就把結果放手邊乙個好拿的地方存著,下次不用再算了。加快了資料取用的速度。

簡單來說就是buffer偏重於寫,而cache偏重於讀。

輸出緩衝區

輸出緩衝區 printf 輸出緩衝區 顯示器 printf函式列印的內容會先送入輸出緩衝區,輸出緩衝區將資料送到顯示器我們才能看見。什麼時候輸入緩衝區會將資料送到顯示器 什麼時候輸出緩衝區會清空 1 當輸出乙個換行符時 2 當輸入時,先清空輸出緩衝區 3 輸出緩衝區滿時 4 當主動呼叫fflush ...

輸入緩衝區與輸出緩衝區

本博文通過一段程式來理解輸入緩衝區與輸出緩衝區。程式如下 author wanghao created time thu 17 may 2018 06 03 12 ampdt file name test.c description include int main int argc,const c...

主函式傳參 輸出緩衝區 註冊退出函式

int main int argc char ar char envp argc 傳遞的引數列表中引數的個數 ar 傳遞的引數列表 envp 環境變數 缺省會給主函式傳遞乙個引數 執行的命令 輸出緩衝區重新整理的條件 從緩衝區刷到介面上 1 程式結束 2 遇到 n 3 緩衝區滿 緩衝區系統預設102...