linux 文件描述符,linux下printf函數為什么不加\n就不能輸出相關的內容 ?

 2023-11-07 阅读 21 评论 0

摘要:轉載請注明出處:http://blog.csdn.net/qq_26093511/article/details/53255970 原因: ?輸出緩沖區的問題. unix上標準輸入輸出都是帶有緩存的,一般是行緩存。 對于標準輸出,需要輸出的數據并不是直接輸出到終端上,而是首先緩存到某個地方&

轉載請注明出處:http://blog.csdn.net/qq_26093511/article/details/53255970

原因: ?輸出緩沖區的問題.

unix上標準輸入輸出都是帶有緩存的,一般是行緩存。

對于標準輸出,需要輸出的數據并不是直接輸出到終端上,而是首先緩存到某個地方,當遇到行刷新標志或者該緩存已滿的情況下,才會把緩存的數據顯示到終端設備上。

ANSI C中定義換行符'\n'可以認為是行刷新標志。所以,printf函數沒有帶'\n'是不會自動刷新輸出流,直至緩存被填滿。

linux 文件描述符,

解決方案:

方案1、在printf里加"\n"

方案2、fflush(stdout)刷新標準輸出緩沖區,把輸出緩沖區里的東西打印到標準輸出設備上 。


? fflush(stdout); // ?刷新一下緩沖區 讓它馬上輸出. ?在printf 之后調用它,就會馬上輸出了. ?
? setvbuf(stdout,NULL,_IONBF,0); //如果你嫌上個方法麻煩, 就使用這個函數. 直接將緩沖區禁止了. 它就直接輸出了。

這兩個函數都是有關流緩沖區的. 具體使用和說明網上有很多. ? 我只說一下什么是流緩沖區, 是做什么用的。

printf函數詳解。? 操作系統為減少 IO操作 所以設置了緩沖區. ?等緩沖區滿了再去操作IO. 這樣是為了提高效率。


下面是測試代碼:

方案1:

#include<stdio.h>
#include<unistd.h>void main()
{int i;for(i=0;i<10;i++){printf("\r %d%% is complete.\n",i);sleep(1);}printf("\n");
}

printf函數功能、

方案2:

#include<stdio.h>
#include<unistd.h>void main()
{int i;for(i=0;i<10;i++){printf("\r %d%% is complete.",i);fflush(stdout);sleep(1);}printf("\n");
}


#include<stdio.h>
#include<unistd.h>void main()
{int i;setvbuf(stdout,NULL,_IONBF,0); //直接將緩沖區禁止了. 它就直接輸出了for(i=0;i<10;i++){printf("\r %d%% is complete.",i);sleep(1);}printf("\n");
}




轉載于:https://www.cnblogs.com/alan666/p/8312067.html

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/4/167366.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息