【Linux】輸出緩沖區和fflush刷新緩沖區

目錄

一、輸出緩沖區?

1.1 輸出緩沖區的使用?

1.2 緩沖區的刷新?

1.3 輸出緩沖區的作用

二、回車換行


一、輸出緩沖區?

C/C++語言,當調用輸出函數(如printf()、puts()、fwrite()等)時,會給我們提供默認的緩沖區。這些數據先存放在輸出緩沖區中,然后再按照一定規則輸出到目標設備(如終端、文件、網絡等)。

1.1 輸出緩沖區的使用?


上面的結果是:等待兩秒后,字符串打印到屏幕上。

如果想讓它立即顯示兩種常用方法

  1. 在字符串尾部加上換行符 '\n'
    printf("Hello CSDN!\n");?
  2. 在printf語句后調用 fflush() 函數

1.2 緩沖區的刷新?

以上的兩種方法都是為了刷新緩沖區,將緩沖區中的內容立即輸出到目標設備上。

在C語言中,有以下幾種方式可以刷新輸出緩沖區:

  1. 自動刷新:緩沖區被填滿、程序正常結束或者遇到換行符。
  2. 手動刷新: 調用fflush函數。

    例如fflush(stdout); 會將緩沖區內容輸出到目標設備上。
  3. 緩沖模式設置:可以使用setbuf()函數或setvbuf()函數設置緩沖區的大小和刷新方式。
  4. 程序退出時刷新:當程序正常終止時,輸出緩沖區通常會被自動刷新。但是,如果程序異常終止(如調用exit()函數)或者使用非正常的終止方式(如abort()函數),輸出緩沖區可能不會被刷新。

1.3 輸出緩沖區的作用

  • 減少系統調用:輸出操作通常比較耗時(因為每一次打印符號到顯示器上的時候都需要訪問外設,效率較低),因此將多個輸出操作合并到一個緩沖區中,可以減少系統調用的次數,從而提高程序的運行效率。

  • 改善輸出效果:通過控制緩沖區的大小和刷新時間,可以更好地控制輸出的效果。
    例如,可以設置緩沖區大小為一行文字的長度,并在每行文字結束時立即刷新緩沖區,從而實現逐行輸出的效果。

  • 提高可移植性:不同操作系統和編程語言對輸出緩沖區的實現方式不同,但它們都提供了類似的接口。因此,使用輸出緩沖區可以提高程序的可移植性,使得程序更容易在不同的平臺上運行。

  • 避免阻塞:當輸出設備(如終端、文件、網絡等)比較慢時,輸出緩沖區可以避免程序被阻塞。程序可以先將數據存儲到緩沖區中,然后繼續執行其他操作,直到輸出設備就緒后再將數據輸出。


二、回車換行

回車換行包含兩件事情:

  1. 換行:換到下一行
  2. 回車:讓對應的光標回到本行最開始

\r? ?表示只回車,光標回到本行最開始。
\n? 表示換行,在Linux中表示換行和回車

老式回車鍵設計成以下形狀也是這個原因,告訴我們是換行、回車?

利用以上知識點就可以做一個簡單的倒計時程序:

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

關于回車和換行的用法也有很多,大家可以自行嘗試一下。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/211079.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/211079.shtml
英文地址,請注明出處:http://en.pswp.cn/news/211079.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

虛擬機安裝 hyper—v 沙盒

一、下載系統鏡像 1、確認電腦內存在8G及以上并提前準備完整的系統鏡像 安裝Hyper-V并重啟電腦后打開程序選擇虛擬機 選擇安裝位置并設置保留第一代的虛擬參數即可開始分配內存&#xff0c;根據自己的需求進行設置 右鍵虛擬機啟動并開始運行&#xff0c;進行鏡像系統的安裝便完…

【Flutter】創建應用頂級組件,應用根組件 (學習記錄)

前言 在 Flutter 中&#xff0c;應用的頂級組件或根組件通常是在 main() 函數中通過 runApp() 方法創建的。這個組件通常是一個 MaterialApp、CupertinoApp、GetMaterialApp 或其他類似的應用框架組件。 以下是一個創建 MaterialApp 作為根組件的示例&#xff1a; void main()…

牛客算法心得——環形數組的連續子數組最大和(dp)

大家好&#xff0c;我是晴天學長&#xff0c; 一個找連續子數組最大和的變形題&#xff0c;需要的小伙伴可以關注支持一下哦&#xff01;后續會繼續更新的。&#x1f4aa;&#x1f4aa;&#x1f4aa; 1) .環形數組的連續子數組的最大和 描述 給定一個長度為 nn 的環形整數數組&…

『 MySQL數據庫 』聚合統計

文章目錄 前言 &#x1f951;&#x1f95d; 聚合函數&#x1f353; COUNT( ) 查詢數據數量&#x1f353; SUM( ) 查詢數據總和&#x1f353; AVG( ) 查詢數據平均值&#x1f353; MAX( ) 查詢數據最大值&#x1f353; MIN( ) 查詢數據最小值 &#x1f95d; 數據分組GROUP BY子句…

湖科大計網:計算機網絡概述

一、計算機網絡的性能指標 一、速率 有時候數據量也認為是以10為底的&#xff0c;看怎么好算。&#xff08;具體吉大考試用什么待商榷&#xff09; 二、帶寬 在模擬信號系統中帶寬的含義&#xff0c;本課程中用到的地方是&#xff1a;香農定理和奈奎斯特定理公式的應用之中。 …

全面高壓化與全面超快充,破解新能源汽車的時代難題

是什么讓新能源車主感到疲憊與焦慮&#xff1f;是什么阻擋更多消費者選擇新能源汽車&#xff1f;我們在身邊進行一個簡單的調查就會發現&#xff0c;問題的答案非常一致&#xff1a;充電。 充電難&#xff0c;充電慢的難題&#xff0c;始終是困擾新能源汽車產業發展&#xff0c…

vue,uniapp的pdf等文件在線預覽

vue&#xff0c;uniapp文件在線預覽方案&#xff0c;用了個稍微偏門一點的方法實現了 通過后端生成文件查看頁面&#xff0c;然后前端只要展示這個網頁就行&#xff0c;uniapp就用web-view來展示&#xff0c;后臺系統就直接window.open()打開就行 示例查看PDF文件&#xff0c;…

每日一練【四數之和】

一、題目描述 18. 四數之和 給你一個由 n 個整數組成的數組 nums &#xff0c;和一個目標值 target 。請你找出并返回滿足下述全部條件且不重復的四元組 [nums[a], nums[b], nums[c], nums[d]] &#xff08;若兩個四元組元素一一對應&#xff0c;則認為兩個四元組重復&#x…

基于ssm社區管理與服務的設計與實現論文

目錄 摘 要 1 Abstract 2 第一章 緒論 3 1.1研究背景 3 1.2 研究現狀 3 1.3 研究內容 4 第二章 系統關鍵技術 5 2.1 Java簡介 5 2.2 MySql數據庫 5 2.3 B/S結構 6 2.4 Tomcat服務器 6 第三章 系統分析 7 3.1可行性分析 7 3.1.1技術可行性 7 3.1.2經濟可行性 7 3.1.3運行可行性…

uniapp自定義的日歷(純手寫)

效果圖&#xff1a; html&#xff1a; <!-- 年月 --><view class"box"><view class"box_time"><view class"time"><image click"lefts" :src"url/uploads/20231206/9d1fb520b12383960dca3c214d84fa0…

vue獲取主機id和IP地址

獲取主機id和IP地址 在vue.config.js const os require(“os”); function getNetworkIp() { let needHost “”; // 打開的host try { // 獲得網絡接口列表 let network os.networkInterfaces(); for (let dev in network) { let iface network[dev]; for (let i 0; i …

LLM之Agent(五)| AgentTuning:清華大學與智譜AI提出AgentTuning提高大語言模型Agent能力

?論文地址&#xff1a;https://arxiv.org/pdf/2310.12823.pdf Github地址&#xff1a;https://github.com/THUDM/AgentTuning 在ChatGPT帶來了大模型的蓬勃發展&#xff0c;開源LLM層出不窮&#xff0c;雖然這些開源的LLM在各自任務中表現出色&#xff0c;但是在真實環境下作…

【Android】Glide的簡單使用(下)

文章目錄 緩存設置內存緩存硬盤緩存自定義磁盤緩存行為圖片請求優先級縮略圖旋轉圖片Glide的回調:TargetsBaseTargetTarget注意事項設置具體尺寸的Target 調試及Debug獲取異常信息 配置第三方網絡庫自定義緩存 緩存設置 GlideApp .with(context).load(gifUrl).asGif().error(…

MySQL_7.索引概述

1.什么是索引 在關系數據庫中&#xff0c;索引是一種單獨的、物理的數對數據庫表中一列或多列的值進行排序的一種存儲結構。 它是某個表中一列或若干列值的集合和相應的指向表中物理標識這些值的數據頁的邏輯指針清單 2.索引的優點 (1)通過創建唯一性索引,可以保證數據庫表中每…

編寫Yaml文件當Poc,利用Nuclei掃描器去掃描漏洞

編寫Yaml文件當Poc,利用Nuclei掃描器去掃描漏洞 YAML是一種數據序列化語言&#xff0c;它的基本語法規則注意如下&#xff1a; -大小寫敏感 -使用縮進表示層級關系 -縮進時不允許使用Tab鍵&#xff0c;只允許使用空格。 -縮進的空格數目不重要&#xff0c;只要相同層級的元…

VSCode如何設置Vue前端的debug調試

vscode在調試vue.代碼時&#xff0c;如何進行debug? 1.安裝Chrome Debug插件。 2.在launch.json中&#xff0c;將url修改成你前端項目的路徑&#xff1a; 1 {2 // Use IntelliSense to learn about possible attributes.3 // Hover to view descriptions of existing att…

redis 三主三從高可用集群docker swarm

由于數據量過大&#xff0c;單個Master復制集難以承擔&#xff0c;因此需要對多個復制集進行集群&#xff0c;形成水平擴展每個復制集只負責存儲整個數據集的一部分&#xff0c;這就是Redis的集群&#xff0c;其作用是提供在多個Redis節點間共享數據的程序集。 官網介紹地址 re…

Elasticsearch:向量數據庫的真相

通過工作示例了解什么是向量數據庫、它們如何實現 “相似性” 搜索以及它們可以在明顯的 LLM 空間之外的哪些地方使用。除非你一直生活在巖石下&#xff0c;否則你可能聽說過諸如生成式人工智能和大型語言模型&#xff08;LLM&#xff09;之類的術語。 除此之外&#xff0c;你很…

如何利用Axure制作移動端產品原型

Axure是一款專業的快速原型設計工具&#xff0c;作為專業的原型設計工具&#xff0c;Axure 能夠快速、高效地創建原型&#xff0c;同時支持多人協作設計和版本控制管理。它已經得到了許多大公司的采用&#xff0c;如IBM、微軟、思科、eBay等&#xff0c;這些公司都利用Axure 進…

android 13.0 Settings去掉二級三級菜單搜索功能

1.概述 在13.0的系統rom定制化開發中,由于客戶定制開發需求,需要去掉Settings里面的搜索功能,主頁面的搜索功能,在前面的章節已經講了 這里需要去掉二級三級菜單的搜索功能,需要從搜索功能流程分析去掉搜索功能 2.Settings去掉二級三級菜單搜索功能核心代碼 packages/ap…