91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

關(guān)于標(biāo)準(zhǔn)I/O庫執(zhí)行I/O操作

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

掃碼添加小助手

加入工程師交流群

1. 緩沖區(qū)概述

標(biāo)準(zhǔn)I/O提供了三種類型的緩沖:

1、全緩沖:

在填滿標(biāo)準(zhǔn)I/O緩沖區(qū)后才進(jìn)行實(shí)際I/O操作。常規(guī)文件(如普通文本文件)通常是全緩沖的。

2、行緩沖:

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

3、不帶緩沖:

用戶程序每次調(diào)庫函數(shù)做寫操作都要通過系統(tǒng)調(diào)用寫回內(nèi)核(如系統(tǒng)調(diào)用函數(shù))。標(biāo)準(zhǔn)錯(cuò)誤輸出通常是無緩沖的,這樣用戶程序產(chǎn)生的錯(cuò)誤信息可以盡快輸出到設(shè)備。

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);// 往文件寫內(nèi)容

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

return 0;

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

測試代碼:

#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的大小只是一個(gè)調(diào)試值

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

i++;

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

return 0;

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

2.1 人為關(guān)閉文件,就算緩沖區(qū)沒有填滿,內(nèi)容也會寫進(jìn)文件

#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);// 往文件寫內(nèi)容

fclose(fp);// 人為關(guān)閉文件,就算緩沖區(qū)沒有填滿,內(nèi)容也會寫進(jìn)文件

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

return 0;

2.2 程序正常結(jié)束,就算緩沖區(qū)沒有填滿,沒有關(guān)閉文件,內(nèi)容也會寫進(jìn)文件。

#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);// 往文件寫內(nèi)容

return 0;

// 程序正常結(jié)束,就算緩沖區(qū)沒有填滿,沒有關(guān)閉文件,內(nèi)容也會寫進(jìn)文件。

3. 行緩沖

#include 《stdio.h》

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

printf(“hello test”);

while(1);

return 0;

運(yùn)行這個(gè)程序,會發(fā)現(xiàn) hello test并沒有打印到屏幕上。因?yàn)闃?biāo)準(zhǔn)輸入和標(biāo)準(zhǔn)輸出對應(yīng)終端設(shè)備時(shí)通常是行緩沖的,當(dāng)在輸入和輸出中遇到換行符時(shí),標(biāo)準(zhǔn)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 程序正常結(jié)束

#include 《stdio.h》

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

printf(“hello sunplusedu”);

return 0;

// 程序正常結(jié)束

4. 不帶緩沖區(qū)

#include 《unistd.h》

#include 《string.h》

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

char *str = “hello test”;

// 有沒有

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

write(1, str, strlen(str));// 往標(biāo)準(zhǔn)輸出寫內(nèi)容

while(1);

return 0;

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

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

    關(guān)注

    0

    文章

    53

    瀏覽量

    18231
  • Linux系統(tǒng)
    +關(guān)注

    關(guān)注

    4

    文章

    614

    瀏覽量

    29900
  • 程序
    +關(guān)注

    關(guān)注

    117

    文章

    3846

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    PCA9554:8位I2C和SMBus I/O擴(kuò)展器的深度解析

    PCA9554:8位I2C和SMBus I/O擴(kuò)展器的深度解析 在電子設(shè)計(jì)領(lǐng)域,I/O擴(kuò)展器是一種常見且實(shí)用的組件,它能為微控制器提供額外的
    的頭像 發(fā)表于 12-27 13:45 ?769次閱讀

    PCA9534:8位I2C和SMBus低功耗I/O擴(kuò)展器的深度解析

    (TI)的PCA9534就是這樣一款優(yōu)秀的8位I/O擴(kuò)展器,適用于2.3V至5.5V的VCC操作,通過I2C接口為大多數(shù)微控制器系列提供通用的遠(yuǎn)程I
    的頭像 發(fā)表于 12-27 10:55 ?837次閱讀

    TCA6408A:低電壓8位I2C和SMBus I/O擴(kuò)展器的深度解析

    TCA6408A:低電壓8位I2C和SMBus I/O擴(kuò)展器的深度解析 在電子設(shè)計(jì)領(lǐng)域,I/O擴(kuò)展器是一種常見且實(shí)用的器件,它可以為處理器提
    的頭像 發(fā)表于 12-25 10:25 ?587次閱讀

    TCA9555:低電壓16位I2C和SMBus I/O擴(kuò)展器的全面解析

    TCA9555:低電壓16位I2C和SMBus I/O擴(kuò)展器的全面解析 在電子設(shè)計(jì)領(lǐng)域,I/O擴(kuò)展器是一種常見且實(shí)用的器件,它能為微控制器提
    的頭像 發(fā)表于 12-25 10:05 ?512次閱讀

    深入解析TCA9554:8位I2C和SMBus低功耗I/O擴(kuò)展器

    兩線雙向I2C總線(或SMBus)協(xié)議提供8位通用并行輸入和輸出(I/O)擴(kuò)展功能。其工作電源電壓范圍為1.65V至5.5V,支持100kHz(標(biāo)準(zhǔn)
    的頭像 發(fā)表于 12-23 17:35 ?721次閱讀

    飛凌嵌入式ElfBoard-文件I/O的深入學(xué)習(xí)之異步I/O

    I/O多路復(fù)用中,進(jìn)程通過系統(tǒng)調(diào)用select或poll來主動查詢文件描述符上是否可以執(zhí)行I/O操作
    發(fā)表于 12-05 11:23

    飛凌嵌入式ElfBoard-文件I/O的深入學(xué)習(xí)之阻塞I/O與非阻塞I/O

    1.4.1.1 概念 阻塞I/O顧名思義就是對文件的I/O操作是阻塞式的,即假如對某些類型文件(管道文件、網(wǎng)絡(luò)設(shè)備文件和字符設(shè)備文件)進(jìn)行讀
    發(fā)表于 12-01 13:07

    飛凌嵌入式ElfBoard-文件I/O的了解探究之I/O緩沖

    通過標(biāo)準(zhǔn)I/O操作磁盤文件時(shí),為了減少系統(tǒng)調(diào)用的次數(shù),標(biāo)準(zhǔn)I/
    發(fā)表于 11-19 16:24

    淺談光學(xué)I/O模塊的熱挑戰(zhàn)

    服務(wù)器和機(jī)架式網(wǎng)絡(luò)基礎(chǔ)設(shè)施系統(tǒng)內(nèi)的光學(xué) I/O 模塊通常接受主動冷卻系統(tǒng)的直接冷卻,特別是來自機(jī)架式設(shè)備前面板的強(qiáng)制風(fēng)冷。機(jī)架式設(shè)備的散熱設(shè)計(jì)需要平衡 I/O 模塊的熱管理與處理器或
    的頭像 發(fā)表于 11-03 09:32 ?752次閱讀
    淺談光學(xué)<b class='flag-5'>I</b>/<b class='flag-5'>O</b>模塊的熱挑戰(zhàn)

    如何解決I/O時(shí)鐘布局器錯(cuò)誤

    I/O 時(shí)鐘布局器階段可能會發(fā)生錯(cuò)誤,指出該工具無法對該時(shí)鐘結(jié)構(gòu)進(jìn)行布局,直至最后 BUFG 仍然無法完成布局。
    的頭像 發(fā)表于 09-23 16:05 ?1034次閱讀

    TCA9537遠(yuǎn)程4位I2C/SMBus I/O擴(kuò)展器技術(shù)解析與應(yīng)用指南

    Texas Instruments TCA9537遠(yuǎn)程4位I^2^C和SMBus I/O擴(kuò)展器在1.65V至5.5V V~CC~電壓下運(yùn)行,可通過I2C接口實(shí)現(xiàn)通用遠(yuǎn)程
    的頭像 發(fā)表于 09-15 16:00 ?985次閱讀
    TCA9537遠(yuǎn)程4位<b class='flag-5'>I</b>2C/SMBus <b class='flag-5'>I</b>/<b class='flag-5'>O</b>擴(kuò)展器技術(shù)解析與應(yīng)用指南

    TCAL9539 I2C總線I/O擴(kuò)展器技術(shù)解析與應(yīng)用指南

    Texas Instrument TCAL9539/TCAL9539-Q1 I^2^C總線/SMBus I/O擴(kuò)展器為雙線雙向I^2^C總線(或SMBus)協(xié)議提供通用并行輸入/輸出
    的頭像 發(fā)表于 08-08 11:49 ?1340次閱讀
    TCAL9539 <b class='flag-5'>I</b>2C總線<b class='flag-5'>I</b>/<b class='flag-5'>O</b>擴(kuò)展器技術(shù)解析與應(yīng)用指南

    I/O密集型任務(wù)開發(fā)指導(dǎo)

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

    MAX7325 I2C端口擴(kuò)展器,提供8路推挽式I/O和8個(gè)漏極開路I/O技術(shù)手冊

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

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

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