從乙個小例子理解stdio 和 sysio

2021-07-27 22:00:51 字數 1050 閱讀 2047

系統環境 ubuntu

#include 

#include

#include

int main()

如上**執行結果可選項: ababab or aaabbb or bbbaaa ?

正確答案:bbbaaa

原因:我們知道標準io不僅僅存在於unix中,在很多其他的作業系統中都實現了標準io庫,當然不同的作業系統標準io函式的實現是由各自系統的系統io函式封裝而成的。示意圖如下:

系統io 提供的函式常被稱為不帶緩衝的io,如 read write 函式 每執行一次就會呼叫核心中的乙個呼叫,但是標準io則不同,它提供緩衝(行緩衝 全緩衝 不帶緩衝),之所以提供緩衝就是為了減少使用read和write的呼叫次數,可以先將資料放置到緩衝區中然後統一執行read write 函式。

行緩衝:換行符(\n)、緩衝區已滿 、強制重新整理(如fflush()函式)

全緩衝:緩衝區已滿 、強制重新整理fflush()

write 系統呼叫 相交與標準io 呼叫速度更快。

putchar 就是行緩衝,所以在這種情況下肯定是將所有a字元都輸入到緩衝區中在集體輸出的。

我們可以使用strace 命令檢視**的呼叫過程:

標準io 和 系統 io 哪個更加效率:

標準io : 暫時放置到緩衝區中,等到條件滿足統一呼叫系統方法。

系統io: 響應及時性

至於哪個效率?不能一概而論。應該從各自的特點上出發進行抉擇。

從乙個小例子再次理解閉包

function fun var f1 fun f2 fun console.log f1 因為f1 fun 執行 所以f1 f2 都等於 fun return 出的函式 function console.log f2 f1 0 f1 是執行 f1這個函式 i 先執行在相加所以i 0 f1 1 在此...

從乙個簡單的小例子入門ThinkPHP6的中介軟體

從thinkphp6開始,乙個叫做 中介軟體 的名詞出現在了官方手冊中,那麼中介軟體是用來幹什麼的?又應該如何使用呢?下面咱們慢慢分析。首先看下中介軟體官網的定義 中介軟體主要用於攔截或過濾應用的 http 請求,並進行必要的業務處理。從字面意思上不難理解,中介軟體就是在我們請求控制器的方法之前,中...

小和問題 乙個好例子

在乙個陣列中,每乙個數左邊比當前數小的數累加起來,叫做這個陣列的小和。求乙個陣列的小和。例子 1,3,4,2,5 1左邊比1小的數 沒有 3左邊比3小的數 1 4左邊比4小的數 1,3 2左邊比2小的數 1 5左邊比5小的數 1,3,4,2 所以小和為1 1 3 1 1 3 4 2 16 這個例子總...