吴忠躺衫网络科技有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

關于標準I/O庫執行I/O操作

GReq_mcu168 ? 來源:玩轉單片機 ? 作者:玩轉單片機 ? 2020-07-01 17:17 ? 次閱讀

1. 緩沖區概述

標準I/O提供了三種類型的緩沖:

1、全緩沖:

在填滿標準I/O緩沖區后才進行實際I/O操作。常規文件(如普通文本文件)通常是全緩沖的。

2、行緩沖:

當在輸入和輸出中遇到換行符時,標準I/O庫執行I/O操作。這允許我們一次輸出一個字符,但只有在寫了一行之后才進行實際I/O操作。標準輸入和標準輸出對應終端設備(如屏幕)時通常是行緩沖的。

3、不帶緩沖:

用戶程序每次調庫函數做寫操作都要通過系統調用寫回內核(如系統調用函數)。標準錯誤輸出通常是無緩沖的,這樣用戶程序產生的錯誤信息可以盡快輸出到設備。

2. 全緩沖

測試代碼:

int main(int argc, char *argv[])

FILE *fp = NULL;

// 讀寫方式打開,文件不存在則創建

fp = fopen(“test.txt”, “w+”);

if(NULL == fp)

printf(“open error

return 1;

char *str = “C++程序員

fwrite(str, 1, strlen(str), fp);// 往文件寫內容

while(1);// 程序阻塞在這里

return 0;

運行程序發現,test.txt并沒有內容。因為常規文件通常是全緩沖的,只有緩沖區滿了后,才會把內容寫到文件中。接下來,我們改一下上面那個例子。

測試代碼:

#include 《stdio.h》

#include 《string.h》

int main(int argc, char *argv[])

FILE *fp = NULL;

// 讀寫方式打開,文件不存在則創建

fp = fopen(“test.txt”, “w+”);

if(NULL == fp)

printf(“open error

return 1;

char *str = “test

int i = 0;

while(i 《= 512){// 緩沖區大小不確定,i的大小只是一個調試值

fwrite(str, 1, strlen(str), fp);// 往文件寫內容

i++;

while(1);// 程序阻塞在這里

return 0;

上面的例子是循環給文件寫內容,讓緩沖區有填滿的可能,結果發現,文件是有內容的。實際上要想成功給文件寫進內容,除了緩沖區填滿,還有別的方法。

2.1 人為關閉文件,就算緩沖區沒有填滿,內容也會寫進文件

#include 《stdio.h》

#include 《string.h》

int main(int argc, char *argv[])

FILE *fp = NULL;

// 讀寫方式打開,文件不存在則創建

fp = fopen(“test.txt”, “w+”);

if(NULL == fp)

printf(“open error

return 1;

char *str = “test ok

fwrite(str, 1, strlen(str), fp);// 往文件寫內容

fclose(fp);// 人為關閉文件,就算緩沖區沒有填滿,內容也會寫進文件

while(1);// 程序阻塞在這里

return 0;

2.2 程序正常結束,就算緩沖區沒有填滿,沒有關閉文件,內容也會寫進文件。

#include 《stdio.h》

#include 《string.h》

int main(int argc, char *argv[])

FILE *fp = NULL;

// 讀寫方式打開,文件不存在則創建

fp = fopen(“test.txt”, “w+”);

if(NULL == fp)

printf(“open error

return 1;

char *str = “test ok

fwrite(str, 1, strlen(str), fp);// 往文件寫內容

return 0;

// 程序正常結束,就算緩沖區沒有填滿,沒有關閉文件,內容也會寫進文件。

3. 行緩沖

#include 《stdio.h》

int main(int argc, char *argv[])

printf(“hello test”);

while(1);

return 0;

運行這個程序,會發現 hello test并沒有打印到屏幕上。因為標準輸入和標準輸出對應終端設備時通常是行緩沖的,當在輸入和輸出中遇到換行符時,標準I/O庫執行I/O操作。如下:

#include 《stdio.h》

int main(int argc, char *argv[])

printf(“hello test

while(1);

return 0;

除了遇到換行符,還有別的方法可以執行I/O操作。

3.1 緩沖區滿

int main(int argc, char *argv[])

while(1)

// 循環打印,總有緩沖區填滿的可能

printf(“hello sunplusedu”);

while(1);

return 0;

3.2 人為刷新緩沖區

#include 《stdio.h》

int main(int argc, char *argv[])

printf(“hello test”);

fflush(stdout);// 人為刷新

while(1);

return 0;

3.3 程序正常結束

#include 《stdio.h》

int main(int argc, char *argv[])

printf(“hello sunplusedu”);

return 0;

// 程序正常結束

4. 不帶緩沖區

#include 《unistd.h》

#include 《string.h》

int main(int argc, char *argv[])

char *str = “hello test”;

// 有沒有

,緩沖區有沒有填滿,都沒關系

write(1, str, strlen(str));// 往標準輸出寫內容

while(1);

return 0;

Linux系統調用中的IO函數一般不帶有緩沖區。
責任編輯:pj

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 緩沖
    +關注

    關注

    0

    文章

    53

    瀏覽量

    17863
  • Linux系統
    +關注

    關注

    4

    文章

    596

    瀏覽量

    27510
  • 程序
    +關注

    關注

    117

    文章

    3796

    瀏覽量

    81420
收藏 人收藏

    評論

    相關推薦

    I/O接口與I/O端口的區別

    在計算機系統中,I/O接口與I/O端口是實現CPU與外部設備數據交換的關鍵組件,它們在功能、結構、作用及運作機制上均存在顯著差異,卻又相互協同工作,共同構建起CPU與外部設備之間的橋梁
    的頭像 發表于 02-02 16:00 ?157次閱讀

    直接I/O

    電子發燒友網站提供《直接I/O.pdf》資料免費下載
    發表于 10-14 10:55 ?0次下載
    直接<b class='flag-5'>I</b>/<b class='flag-5'>O</b><b class='flag-5'>庫</b>

    物聯網中常見的I/O擴展電路設計方案_IIC I/O擴展芯片

    )自帶的I/O端口數量有限,但物聯網項目往往需要連接大量的傳感器、執行器和其他外設。I2C I/O
    的頭像 發表于 09-24 11:29 ?679次閱讀
    物聯網中常見的<b class='flag-5'>I</b>/<b class='flag-5'>O</b>擴展電路設計方案_IIC <b class='flag-5'>I</b>/<b class='flag-5'>O</b>擴展芯片

    保護I/O模塊免受浪涌事件的影響

    電子發燒友網站提供《保護I/O模塊免受浪涌事件的影響.pdf》資料免費下載
    發表于 09-21 10:14 ?0次下載
    保護<b class='flag-5'>I</b>/<b class='flag-5'>O</b>模塊免受浪涌事件的影響

    遠程I/O模塊在不同領域的應用

    在當今快速發展的工業自動化領域,遠程輸入/輸出(I/O)模塊正逐漸成為不可或缺的核心組件,本文將探討遠程I/O模塊在不同領域的廣泛應用。 工業制造領域 在汽車制造業等高度自動化的生產線
    的頭像 發表于 09-20 16:43 ?662次閱讀

    I/O模塊的主要作用有哪些

    點的信號。 我們來看看遠程I/O模塊的主要作用: 信號集中管理:在一個廣闊的工廠環境中,設備可能散布在不同的區域。遠程I/O模塊能夠將這些分散的傳感器(例如溫度、壓力、液位傳感器)或
    的頭像 發表于 09-20 16:41 ?657次閱讀

    區域架構和 MCU I/O 擴展

    電子發燒友網站提供《區域架構和 MCU I/O 擴展.pdf》資料免費下載
    發表于 09-09 10:51 ?0次下載
    區域架構和 MCU <b class='flag-5'>I</b>/<b class='flag-5'>O</b> 擴展

    PLC的I/O點數是什么意思

    在工業自動化領域中,可編程邏輯控制器(PLC)扮演著至關重要的角色。PLC以其高可靠性、易編程性和強大的控制功能,廣泛應用于各種自動化系統中。而在PLC的性能參數中,I/O點數是一個不可忽視的重要指標。本文將對PLC的I/
    的頭像 發表于 06-27 11:15 ?4997次閱讀

    LM8328支持Keyscan I/O擴展PWM和ACCESS.bus的移動I/O伴侶數據表

    電子發燒友網站提供《LM8328支持Keyscan I/O擴展PWM和ACCESS.bus的移動I/O伴侶數據表.pdf》資料免費下載
    發表于 06-27 10:08 ?0次下載
    LM8328支持Keyscan <b class='flag-5'>I</b>/<b class='flag-5'>O</b>擴展PWM和ACCESS.bus的移動<b class='flag-5'>I</b>/<b class='flag-5'>O</b>伴侶數據表

    軟件可配置模擬 I/O 的設計理念

    作者: Kenton Williston 曾幾何時,模擬 I/O 就是最專業、功能最固定的硬件。例如,電流驅動器和電壓傳感器是完全不同的零件,試圖顛倒其角色可謂是荒謬至極。 軟件可配置模擬 I/
    的頭像 發表于 05-05 11:10 ?966次閱讀
    軟件可配置模擬 <b class='flag-5'>I</b>/<b class='flag-5'>O</b> 的設計理念

    -50-200度溫度采集分布式I/O模塊

    類型的I/O板,可以滿足工業領域的各種傳感器、儀表、執行器。用于測量和控制。 在裝配2路RTD熱電阻采集I/O模塊時,各個模塊可以任意組合排
    的頭像 發表于 04-08 14:41 ?473次閱讀
    -50-200度溫度采集分布式<b class='flag-5'>I</b>/<b class='flag-5'>O</b>模塊

    16路數字量輸入I/O模塊用于測量和控制

    類型的I/O板,可以滿足工業領域的各種傳感器、儀表、執行器。16路數字量輸入I/O模塊用于測量和控制。 在裝配現場16路數字量輸入
    的頭像 發表于 04-07 16:57 ?931次閱讀
    16路數字量輸入<b class='flag-5'>I</b>/<b class='flag-5'>O</b>模塊用于測量和控制

    鴻蒙OS開發實例:【ArkTS類多線程I/O密集型任務開發】

    使用異步并發可以解決單次I/O任務阻塞的問題,但是如果遇到I/O密集型任務,同樣會阻塞線程中其它任務的執行,這時需要使用多線程并發能力來進行
    的頭像 發表于 04-01 16:32 ?586次閱讀
    鴻蒙OS開發實例:【ArkTS類<b class='flag-5'>庫</b>多線程<b class='flag-5'>I</b>/<b class='flag-5'>O</b>密集型任務開發】

    鴻蒙原生應用開發-ArkTS語言基礎類多線程I/O密集型任務開發

    使用異步并發可以解決單次I/O任務阻塞的問題,但是如果遇到I/O密集型任務,同樣會阻塞線程中其它任務的執行,這時需要使用多線程并發能力來進行
    發表于 03-21 14:57

    FANUC外部I/O點數不夠用了怎么辦?可以擴展I/O點數嗎?

    連接起來,以便進行輸入和輸出操作。每個I/O模塊都有一定數量的輸入和輸出點數,這取決于具體的模塊型號。但是,當您的應用需要更多的I/O點數時
    的頭像 發表于 02-18 15:21 ?2091次閱讀
    百家乐微笑玩法| 百家乐桌子豪华| 大发888娱乐城平台| 百家乐声音不印网| 百家乐官网有真假宝单吗| 大发888皇冠娱乐城| 百家乐那个平台好| 新加坡百家乐官网赌法| 尉氏县| 大发888 充值淘宝| 百家乐楼梯缆大全| 澳门百家乐官网手机软件| 百家乐官网波音平台开户导航| 新利88国际娱乐网| 德州扑克女王| 威尼斯人娱乐网网上百家乐的玩法技巧和规则 | 百家乐998| 百家乐游戏合法吗| 银河百家乐官网的玩法技巧和规则| 百家乐官网视频免费下载| 新葡京官网| 皇冠现金网提款问题| 大发888游戏平台hg| 网上百家乐赌场娱乐网规则| 百家乐的必胜方法| 百家乐官网贴士介绍| 皇室百家乐官网的玩法技巧和规则| 精英百家乐官网现金网| 铁杆国际娱乐城| 博E百娱乐城| 永利博国际| 皇冠体育网| 德州扑克技巧| 水果机赌博| 禹州市| 岳阳县| 太阳城网上版| 正规棋牌游戏| 时时博在线娱乐城| 湟源县| 赌百家乐官网的方法|