一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

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

3天內不再提示

關于標準I/O庫執(zhí)行I/O操作

GReq_mcu168 ? 來源:玩轉單片機 ? 作者:玩轉單片機 ? 2020-07-01 17:17 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

1. 緩沖區(qū)概述

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

1、全緩沖:

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

2、行緩沖:

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

3、不帶緩沖:

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

2. 全緩沖

測試代碼:

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

FILE *fp = NULL;

// 讀寫方式打開,文件不存在則創(chuàng)建

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;

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

測試代碼:

#include 《stdio.h》

#include 《string.h》

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

FILE *fp = NULL;

// 讀寫方式打開,文件不存在則創(chuàng)建

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

if(NULL == fp)

printf(“open error

return 1;

char *str = “test

int i = 0;

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

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

i++;

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

return 0;

上面的例子是循環(huán)給文件寫內容,讓緩沖區(qū)有填滿的可能,結果發(fā)現(xiàn),文件是有內容的。實際上要想成功給文件寫進內容,除了緩沖區(qū)填滿,還有別的方法。

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

#include 《stdio.h》

#include 《string.h》

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

FILE *fp = NULL;

// 讀寫方式打開,文件不存在則創(chuàng)建

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);// 人為關閉文件,就算緩沖區(qū)沒有填滿,內容也會寫進文件

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

return 0;

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

#include 《stdio.h》

#include 《string.h》

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

FILE *fp = NULL;

// 讀寫方式打開,文件不存在則創(chuàng)建

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;

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

3. 行緩沖

#include 《stdio.h》

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

printf(“hello test”);

while(1);

return 0;

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

#include 《stdio.h》

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

printf(“hello test

while(1);

return 0;

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

3.1 緩沖區(qū)滿

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

while(1)

// 循環(huán)打印,總有緩沖區(qū)填滿的可能

printf(“hello sunplusedu”);

while(1);

return 0;

3.2 人為刷新緩沖區(qū)

#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. 不帶緩沖區(qū)

#include 《unistd.h》

#include 《string.h》

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

char *str = “hello test”;

// 有沒有

,緩沖區(qū)有沒有填滿,都沒關系

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

while(1);

return 0;

Linux系統(tǒng)調用中的IO函數一般不帶有緩沖區(qū)。
責任編輯:pj

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

    關注

    0

    文章

    53

    瀏覽量

    18033
  • Linux系統(tǒng)

    關注

    4

    文章

    605

    瀏覽量

    28617
  • 程序
    +關注

    關注

    117

    文章

    3826

    瀏覽量

    82987
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    I/O密集型任務開發(fā)指導

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

    MAX7325 I2C端口擴展器,提供8路推挽式I/O和8個漏極開路I/O技術手冊

    MAX7325 2線串行接口外設具有16路I/O端口。其中8路為推挽輸出,另外8路為I/O端口,帶有可選擇的內部上拉和瞬態(tài)檢測功能。8路I/
    的頭像 發(fā)表于 05-22 15:27 ?261次閱讀
    MAX7325 <b class='flag-5'>I</b>2C端口擴展器,提供8路推挽式<b class='flag-5'>I</b>/<b class='flag-5'>O</b>和8個漏極開路<b class='flag-5'>I</b>/<b class='flag-5'>O</b>技術手冊

    怎樣使用無線 I/O 網關搭建物聯(lián)網系統(tǒng)

    、智慧城市等。 ? ?● 根據應用場景確定需要監(jiān)測和控制的具體設備及其參數。 2. 設備兼容性: ? ?● 確定網關需要支持的設備類型、通信協(xié)議和接口。 ? ?● 確保無線I/O網關能夠與現(xiàn)場的傳感器、執(zhí)行器等設備兼容。 二、選
    的頭像 發(fā)表于 04-13 07:35 ?342次閱讀
    怎樣使用無線 <b class='flag-5'>I</b>/<b class='flag-5'>O</b> 網關搭建物聯(lián)網系統(tǒng)

    I/O接口與I/O端口的區(qū)別

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

    單片機I/O接口的傳輸方式

    單片機(Microcontroller Unit,MCU)作為嵌入式系統(tǒng)的核心部件,其輸入輸出(Input/Output,I/O)接口是實現(xiàn)與外部設備數據交換的關鍵。I/O接口不僅承擔
    的頭像 發(fā)表于 02-02 15:56 ?1066次閱讀

    直接I/O

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

    使用智能高邊開關優(yōu)化數字I/O模塊的電源

    電子發(fā)燒友網站提供《使用智能高邊開關優(yōu)化數字I/O模塊的電源.pdf》資料免費下載
    發(fā)表于 09-25 10:07 ?1次下載
    使用智能高邊開關優(yōu)化數字<b class='flag-5'>I</b>/<b class='flag-5'>O</b>模塊的電源

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

    )自帶的I/O端口數量有限,但物聯(lián)網項目往往需要連接大量的傳感器、執(zhí)行器和其他外設。I2C I/O
    的頭像 發(fā)表于 09-24 11:29 ?1349次閱讀
    物聯(lián)網中常見的<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模塊免受浪涌事件的影響

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

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

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

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

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

    區(qū)域架構和 MCU I/O 擴展

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

    TCAL敏捷I/O擴展器的特性

    電子發(fā)燒友網站提供《TCAL敏捷I/O擴展器的特性.pdf》資料免費下載
    發(fā)表于 09-05 10:49 ?0次下載
    TCAL敏捷<b class='flag-5'>I</b>/<b class='flag-5'>O</b>擴展器的特性

    簡述計算機的I/O控制方式

    計算機的I/O(輸入/輸出)控制方式是計算機系統(tǒng)中至關重要的部分,它決定了CPU與外設之間數據交換的方式和效率。隨著計算機技術的不斷發(fā)展,I/O控制方式也經歷了從簡單到復雜、從低效到高
    的頭像 發(fā)表于 08-20 10:55 ?2372次閱讀

    NCT5532D LPC I/O英文手冊

    電子發(fā)燒友網站提供《NCT5532D LPC I/O英文手冊.pdf》資料免費下載
    發(fā)表于 08-09 14:58 ?15次下載