在windows系統(tǒng)下,我們通常認(rèn)為回車和換行是一個概念,但實際上,換行是指移動到下一行的當(dāng)前位置,而回車則是回到當(dāng)前行的開頭。
我們之所以將回車和換行視為同一概念,是因為在使用n時,它同時執(zhí)行了回車和換行的操作。
現(xiàn)在讓我們看一下在Linux系統(tǒng)下以下兩段代碼的區(qū)別:
代碼語言:C 運行次數(shù):0
#include<stdio.h> int main(){ printf("遲來的grownn"); return 0; }
代碼語言:C 運行次數(shù):0
#include<stdio.h> int main(){ printf("遲來的grownr"); return 0; }
可以看到,n和r的效果不同,但使用r時,輸出結(jié)果似乎沒有顯示。這是由于緩沖區(qū)的影響。
我們可以簡單地理解為,輸入輸出操作并不是逐字符進(jìn)行的(某些特殊情況除外),而是使用行緩沖區(qū)。
在行緩沖模式下,只有遇到換行符時才會執(zhí)行真正的輸出。因此,使用r時,輸出內(nèi)容會暫存在緩沖區(qū),直到程序結(jié)束時才會清空緩沖區(qū)。
代碼語言:C 運行次數(shù):0
#include<stdio.h> int main(){ printf("遲來的grownn"); sleep(3); return 0; }
代碼語言:C 運行次數(shù):0
int main(){ printf("遲來的grown"); sleep(3); return 0; }
運行結(jié)果如下:
第一段代碼先輸出遲來的grown,然后休眠3秒; 第二段代碼休眠3秒后,在程序結(jié)束時才輸出遲來的grown。
這兩段代碼的區(qū)別在于是否使用了n,這也證明了行緩沖區(qū)的機(jī)制:遇到換行符時會刷新緩沖區(qū)內(nèi)容(程序結(jié)束時也會刷新緩沖區(qū)內(nèi)容)。
這是因為在Linux中,程序執(zhí)行完畢后,光標(biāo)位于行首,命令行信息會覆蓋輸出內(nèi)容。
那么,我們能否通過一些操作來查看輸出內(nèi)容呢?
當(dāng)然可以,我們可以使用fflush來刷新緩沖區(qū)(stdout)的內(nèi)容。
代碼語言:C 運行次數(shù):0
int main(){ printf("遲來的grown"); fflush(stdout); sleep(3); return 0; }