嵌入式Linnux學習 -- 軟件編程2

四、IO

1. 概念

1.? IO 指 input / output

2.? Linux系統中一切皆是文件

3.? IO操作的對象是文件

2. 文件

1. 概念

一段數據的集合

2. 特點

文件通常存放在外存中,掉點后數據不會丟

3. 分類

  • b(block,塊設備文件)

?-- 按塊掃描信息的文件,通常用于存儲設備

?--?數據讀寫以固定大小塊為單位,支持隨機訪問

?-- 文件IO

  • c(character,字符設備文件)

?-- 按字符掃描信息的文件,通常用于串行設備

?--?數據是流式的,通常不支持隨機訪問

?-- 文件IO

  • d(directory,目錄文件)

?-- 表示一個目錄,用于存放其他文件和子目錄的文件夾

?-- 目錄IO/文件IO

  • -(普通文件)

?-- 常見的文件類型,存放一般信息的文件

?-- 標準IO/文件IO

  • l(link,鏈接文件)

?-- 操作文件等價于操作文件指向的文件

?-- 鏈接IO/文件IO

  • s(socket,套接字文件)

?-- 用來進程間通信,用于網絡通信或本地進程通信

?-- 文件IO

  • p(pipe,管道文件)

?-- 用來進程間通信,一種單向數據通道,用于命令間的數據傳遞

?-- 文件IO

3. 標準IO

1. 概念

用來操作普通文件

2. 文件類型

1. ASCII碼文件

文件中的所有內容均為能夠在屏幕上顯示的ASCII碼字符

程序、文本文件均為ASCII碼文件

2. 二進制文件

文件中的所有內容均為數據對應的二進制形式存放,包含一些不能在界面上顯示的內容

ASCII碼文件也是二進制文件

圖片、音視頻、壓縮包均為二進制文件

3. 標準IO的接口

1. fopen / fclose

2. fgetc / fputc

3. fgets / fputs

4. fscanf / fprintf

5. fread / fwrite

6. fseek / rewind/ftell

4. 流

stdin:標準輸入流

stdout:標準輸出流

stderr:標準出錯流

printf、puts、putchar????????通過stdout流實現在終端信息打印

scanf、gets、getchar???????通過stdin流實現獲得終端信息

perror????????????????????????????????通過stderr流實現在終端打印出錯信息

5. 文件的打開

1. fopen
  • 原型:FILE *fopen(const char *pathname, const char *mode);
  • 功能:

????????打開pathname指向字符串對應的文件,并且和它建立一個流

  • 參數:

????????pathname:要打開的文件路徑字符串,mode:打開的方式

  • 返回值:

? ? 成功返回FILE*指針,?失敗返回NULL

? ? ? ? r? ? ? ?只讀 ? ????????? 文件存在只讀打開,文件不存在報錯
r+? ? ?讀寫 ? ????????? 文件存在讀寫打開,文件不存在報錯
w? ? ? 只寫 ? ????????? 文件存在清零,文件不存在創建,只寫打開
w+? ? 寫讀? ? ? ? ? ? 文件存在清零,文件不存在創建,寫讀打開
a? ? ? ?追加? ? ? ? ? ? 文件存在追加,文件不存在創建,只寫打開
a+ ? ?追加讀寫? ? ? 文件存在追加,文件不存在創建,寫讀打開

2. fclose
  • 原型:int fclose(FILE *stream);
  • 功能:

????????關閉已經打開的流

  • 參數:

????????stream:文件流指針

  • 返回值:

????????成功返回0,失敗返回EOF(-1)

3. fputc
  • 原型:int fputc(int c, FILE *stream);
  • 功能:

????????將字符c寫入流中

  • 參數:

????????c:要寫入的字符,stream:文件流指針

  • 返回值:

????????成功返回輸出的ASCII碼值, 失敗返回EOF

putchar() 等價于 fputc(ch, stdout)

4. fgetc
  • 原型:int fgetc(FILE *stream);
  • 功能:

????????讀取流中的下一個字符

  • 參數:

????????stream:文件流指針

  • 返回值:

????????成功返回讀到字符的ASCII碼值,失敗或者讀到文件末尾返回EOF

ch = getchar() 等價于 ch = fgetc(stdin)

????????

5. fputs
  • 原型:int fputs(const char *s, FILE *stream);
  • 功能:

????????向流中寫入s指向的字符串

  • 參數:

????????s:要寫入的字符串的首地址,stream:文件流指針

  • 返回值:

????????成功返回非負數,失敗返回EOF

6. fgets
  • 原型:char *fgets(char *s, int size, FILE *stream);
  • 功能:

????????從流中最多讀size-1個字節數據放入s指向的空間中,遇到\n讀取截止

  • 參數:

????????s:存放數據空間的首地址,size:最多存放元素的個數,stream:文件流指針

  • 返回值:

????????成功返回存放數據空間的首地址

????????失敗返回NULL,讀到文件末尾返回NULL

fputs不會多打印\n字符,puts會多打印一個\n字符

gets會去掉從終端接收的\n字符,fgets不會去掉從終端接收的\n字符

7. fprintf
  • 原型:int fprintf(FILE *stream, const char *format, ...);
  • 功能:

????????將格式化的字符串打印在流中

  • 參數:

????????stream:文件流指針, format:格式化的字符串,? ?...:參數

  • 返回值:

????????成功返回打印字符的個數

????????失敗返回負數

8. fscanf
  • 原型:int fscanf(FILE *stream, const char *format, ...);
  • 功能:

????????從流中接收格式化的字符串

  • 參數:

????????stream:文件流指針, format:格式化字符串????????...:參數

  • 返回值:

????????成功返回匹配的輸入控制符的個數

????????失敗返回EOF,讀到文件末尾返回EOF

4. 標準IO的緩存

1. 類型

1. 全緩存(4k)

1.緩存區滿刷新緩存

2.刷新條件:

????????緩存區滿4k刷新

????????fflush函數強制刷新

????????fclose或者程序關閉刷新

3.與文件建立的緩存一般為全緩存

2. 行緩存(1k)

1. 遇到\n刷新緩存區

2. 刷新條件:

????????緩存區滿1k刷新

????????遇到\n刷新

????????fflush函數強制刷

????????fclose或者程序關閉刷新

3. 與終端建立的緩存一般為行緩存(stdin、stdout均為行緩存)

3. 不緩存(0k)

1. 立即刷新不緩存

2. 刷新條件:

????????不緩存立即刷新

3. 出錯處理或者人機交互一般使用不緩存(stderr不緩存)

2. 標準IO的緩存

1. 特點

????????標準IO是一種有緩存的IO

????????效率高

????????實時性差

2. 標準IO 與 文件IO

標準IO:用戶代碼 → 庫函數 → 緩存 → 內核

  • 路徑更長,但效率高。

  • 緩存由標準庫管理

文件IO:用戶代碼 → 內核

  • 直接通過open(),read(),write()等系統調用操作,無中間緩沖區。

  • 實時性強,但頻繁調用效率低

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

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

相關文章

Spark02 - SparkContext介紹

一、應用入口:SparkContextSpark Application 程序入口為:SparkContext,任何一個應用首先需要構建 SparkContext 對象,如下兩步構建:第一步、創建 SparkConf 對象設置 Spark Application 基本信息,比如應用…

Selenium動態元素定位

動態元素定位方法一:使用CSS選擇器通過部分匹配操作符定位動態屬性中的固定部分。*(包含),^(開頭),$(結尾)。/* 匹配id前綴為user_的元素 */ cssdiv[id^"user_"…

OBOO鷗柏丨115寸商用屏/工業液晶顯示器招標投標核心標底參數要求

整機參數要求:商用液晶顯示器/工業LCD一體機/商業智能終端機/工業防爆顯示器/招標投標核心標底參數要求1、整機屏幕采用≥采用115英寸超高清原廠原包原裝工業LCD液晶屏面板;具有高色域,顯示動態視頻、web及3D動畫時,保障運動畫面流…

麻溜啟動Oracle實例demo

注意:鏡像非常大并且外網網絡過慢,可能得pull一天(n次超時)。。md后臺靜默pull命令: nohup docker pull container-registry.oracle.com/database/express:latest > pull.log 2>&1 & 啟動實例&#xff1…

應用監控工具Skywalking

目錄 Skywalking介紹 Skywalking架構 Skywalking安裝 Skywalking使用 Skywalking配置 Skywalking數據持久化 Skywalking告警 Skywalking介紹 Apache Skywalking是一個開源的應用性能監控(Application Performance Monitoring,APM)工具…

TCP服務建立的全流程詳解

TCP的服務監聽步驟(等待客戶端連接前)TCP 服務器通過以下步驟完成從初始化到等待客戶端連接,為后續的數據傳輸(send()/recv())奠定了基礎一、創建套接字(Socket)作用:套接字是網絡通…

數據結構 雙鏈表與LinkedList

本節目標: 認識并且能夠實現一個雙鏈表認識LinkedList類并且知道如何去使用 1.雙鏈表 概念 在數據結構中,雙鏈表(Doubly Linked List) 是一種常見的線性數據結構,它由一系列節點組成,每個節點不僅包含數據…

如何解決 JetBrains IntelliJ IDEA 2024.2 和 2025.2 新版本區域選擇問題:key is invalid

如何解決 JetBrains IntelliJ IDEA 2024.2 和 2025.2 新版本區域選擇問題:key is invalid 在 JetBrains 發布的 IntelliJ IDEA、PyCharm 2024.2 和 2025.2 新版本中,增加了一個新的功能——區域選擇。在設置菜單中,你可以找到這一選項&#…

GSON 框架下百度天氣 JSON 數據轉 JavaBean 的實戰攻略

目錄 前言 一、百度天氣JSON 1、請求參數 2、返回參數 3、屬性映射 二、GSON屬性映射實戰 1、類對象映射 2、屬性字段映射 3、日期數據映射 三、天氣接口對象展示 1、接口調用 2、Java屬性打印輸出 四、總結 前言 在當今數字化時代,數據的高效處理與轉換…

NAS技術在縣級融媒體中心的架構設計與安全運維淺析

NAS技術在縣級融媒體中心的架構設計與安全運維淺析 ——原理剖析、應用實踐與防御體系建設作者:高級網絡安全工程師 吉林?鎮賚融媒 劉曉偉 最后更新:2025年8月 適用對象:媒體行業網絡安全從業者一、NAS技術核心原理剖析 1. 基礎架構 NAS&am…

CobaltStrike的搭建和使用

下載CobaltStrike環境建議使用jdk17,其他java版本有些功能可能無法使用通過網盤分享的文件:CS4.7key-mht.zip 鏈接: https://pan.baidu.com/s/1CRd1x4r6EIk14BD3UCLgxw?pwdevf4 提取碼: evf4將下載的文件分別放在服務器和 本地/kali 上 也就是服務器為…

【Altium designer】一鍵給多個器件添加參數

目的: 一鍵給N個元器件/Part添加參數和修改參數值,比如一鍵給多個電阻添加“備注”并賦予備注的內容為“不焊接”,或者更改“備注”的內容為“不焊接”或空。 背景: 剛入門用AD畫原理圖,因為原理圖的電阻、電容和芯片等等的冗余/兼容設計太多,增加備注不焊的元器件位號…

熟練掌握switch語句:技巧與運用

目錄 一、switch語句基礎 基本語法結構: 在C/C中: 注意事項: 二、if與switch語句對比 示例:計算整數除以3的余數 使用if語句實現: 使用switch語句實現: 三、break語句的作用 示例(無br…

【03】廈門立林科技——立林科技 嵌入式 校招筆試,題目記錄及解析

廈門立林科技——立林科技 嵌入式 校招筆試,題目記錄及解析 1.下面的程序的輸出是()。2.在頭文件中#ifndef/#define/#endif的作用是4.執行下面程序中的輸出語句后,輸出的結果是()6.在32位處理器上,運行如下程序后p的值為()。10.設有兩字符串“…

C++算法(數據結構)版

C算法(數據結構)版 有些題目不是完整的題目,如需查看完整的題目請移步到acwing的算法基礎課中 文章目錄C算法(數據結構)版單鏈表思路:雙鏈表思路:棧思路:隊列思路:單調棧…

算法訓練營DAY57 第十一章:圖論part07

prim算法精講 53. 尋寶(第七期模擬筆試) 題目描述: 在世界的某個區域,有一些分散的神秘島嶼,每個島嶼上都有一種珍稀的資源或者寶藏。國王打算在這些島嶼上建公路,方便運輸。 不同島嶼之間,…

最短路問題從入門到負權最短路

一,BFS層次最短路/*題目描述 題目描述 給出一個 N 個頂點 M 條邊的無向無權圖,頂點編號為 1~N。 問從頂點 1 開始,到其他每個點的最短路有幾條。 輸入格式 第一行包含 2 個正整數 N,M,為圖的頂點數與邊數。 接下來 M 行&#xff…

AI智能體小白入門指南

AI智能體小白入門指南 ——什么是AI智能體?它們如何工作? 一、AI智能體是什么? AI智能體(AI Agent)是能感知環境、自主決策并執行動作的人工智能系統。 類比理解:像一個“虛擬機器人”或“數字助手”&#…

《設計模式》策略模式

1.策略模式定義 策略模式(Strategy Pattern)是一種行為型設計模式,它定義了一組算法,將每個算法封裝起來,并使它們可以相互替換,從而讓算法的變化獨立于使用它的客戶(Client)。 換…

AWS DMS 深度解析:從遷移任務到復制任務 - 全流程指南與最佳實踐

AWS Database Migration Service (DMS) 是一項強大的云服務,用于在源數據庫和目標數據庫之間安全地遷移數據。其核心優勢在于支持幾乎零停機時間的遷移,這主要歸功于其“變更數據捕獲 (CDC)”功能。理解遷移任務 (Migration Task) 和復制任務 (Replication Task) 的關系與操作…