linux學習筆記8-linux系統io開發知識sets
資源和工具
基礎知識
工程示例
x.1 read/write
read/write
read函式從開啟的裝置或檔案中讀取資料。
#include <unistd.h> ssize_t read(int fd, void *buf, size_t count); 返回值:成功返回讀取的位元組數,出錯返回-1並設定errno,如果在調read之前已到達檔案末尾,則這次read返回0
引數count是請求讀取的位元組數,讀上來的資料儲存在緩衝區buf中,同時檔案的當前讀寫位置向後移。注意這個讀寫位置和使用C標準I/O庫時的讀寫位置有可能不同,這個讀寫位置是記在核心中的,而使用C標準I/O庫時的讀寫位置是使用者空間I/O緩衝區中的位置。
fread就是通過read來實現的,fread是C語言的庫,而read是系統呼叫
但是差別在read每次讀的資料是呼叫者要求的大小,比如呼叫要求讀取10個位元組資料,read就會讀10個位元組資料到陣列中,而fread不一樣,為了加快讀的速度,fread每次都會讀比要求更多的資料,然後放到緩衝區中,這樣下次再讀資料只需要到緩衝區中去取就可以了。
fread每次會讀取一個緩衝區大小的資料,32位下一般是4096個位元組,相當於呼叫了read(fd,buf,4096)
比如需要讀取512個位元組資料,分4次讀取,呼叫read就是:
for(i=0; i<4; ++i)
read(fd,buf,128)
一共有4次系統呼叫
而fread一次就讀取了4096位元組放到緩衝區了,所以省事了
比如用fgetc讀一個位元組,fgetc有可能從核心中預讀1024個位元組到I/O緩衝區中,再返回第一個位元組,這時該檔案在核心中記錄的讀寫位置是1024,而在FILE結構體中記錄的讀寫位置是1。注意返回值型別是ssize_t,表示有符號的size_t,這樣既可以返回正的位元組數、0(表示到達檔案末尾)也可以返回負值-1(表示出錯)。read函式返回時,返回值說明了buf中前多少個位元組是剛讀上來的。有些情況下,實際讀到的位元組數(返回值)會小於請求讀的位元組數count,例如:
讀常規檔案時,在讀到count個位元組之前已到達檔案末尾。例如,距檔案末尾還有30個位元組而請求讀100個位元組,則read返回30,下次read將返回0。
從終端裝置讀,通常以行為單位,讀到換行符就返回了。
從網路讀,根據不同的傳輸層協議和核心快取機制,返回值可能小於請求的位元組數,後面socket程式設計部分會詳細講解。
相關文章
- 基礎 IO (Linux學習筆記)Linux筆記
- Linux程式設計學習筆記 | Linux IO學習[2] – 標準IOLinux程式設計筆記
- 嵌入式系統開發:基於Linux學習筆記整理Linux筆記
- Redis基礎知識(學習筆記6--執行緒IO模型)Redis筆記執行緒模型
- 基礎知識學習筆記筆記
- 機器學習學習筆記——基本知識機器學習筆記
- Nginx有哪些重要特性?學習linux系統知識NginxLinux
- React學習筆記知識點整理React筆記
- RxJava 學習筆記 -- 基礎知識RxJava筆記
- JAVA學習筆記及知識積累Java筆記
- Java學習筆記之----------Java基本知識Java筆記
- 【原】2024年系統規劃與管理師案例知識點學習筆記筆記
- 【筆記】動手學深度學習-預備知識筆記深度學習
- iOS開發學習筆記:基礎知識之代理模式之老王的故事iOS筆記模式
- C++基礎知識學習筆記(1)C++筆記
- C++基礎知識學習筆記(3)C++筆記
- Promise學習筆記(知識點 + 手寫Promise)Promise筆記
- GO 學習筆記 《1. 基礎知識》Go筆記
- Java學習筆記09(IO流)Java筆記
- 嵌入式Linux開發工程師需要學習哪些知識Linux工程師
- Java開發基礎知識學習總結之(上)-王者筆記建議收藏Java筆記
- FFmpeg開發筆記(一)搭建Linux系統的開發環境筆記Linux開發環境
- Linux 學習筆記Linux筆記
- 學習筆記 作業系統Linux-Ubuntu 之初次新增系統呼叫筆記作業系統LinuxUbuntu
- 【知識圖譜 趙軍 學習筆記】第二章 知識表示筆記
- Android 開發學習筆記Android筆記
- 分散式系統學習筆記分散式筆記
- 標準IO和系統IO的相關知識積累
- Python學習筆記—day1—基礎知識Python筆記
- [Android學習筆記]雜碎知識(持續更新)Android筆記
- <react學習筆記(5)>知識點回顧(1)React筆記
- LiteOS學習筆記[01]-weharmonyos-基礎知識筆記
- Redis基礎知識(學習筆記3--Redlock)Redis筆記
- Redis基礎知識(學習筆記11--SDS)Redis筆記
- 資料庫學習筆記 - MySQL基礎知識資料庫筆記MySql
- 作業系統學習筆記之初識程式和程式控制作業系統筆記
- nodejs的socket.io學習筆記NodeJS筆記
- IO——簡略的學習筆記(1)筆記