嵌入式系統學習Day18(文件編程-系統調用文件IO)

- open

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);?? ?

功能:
打開文件?
參數:
@pathname --- 文件名?
@flags?
必選:
O_RDONLY
O_WRONLY
O_RDWR
附加:
O_APPEND //追加 ---寫?
O_CREAT ?//創建?
O_TRUNC ?//截斷?
@mode
表示創建文件的權限 --- 只有前面有O_CREAT時,才需要指定?
0777
0666
返回值:
成功 返回文件描述符?
失敗 -1 &&errno?

fopen("1.txt", "r") ?---> open("1.txt",O_RDONLY);
fopen("1.txt","r+") ?---> open("1.txt",O_RDWR);
fopen("1.txt", "w") ?---> open("1.txt",O_WRONLY|O_CREAT|O_TRUNC,0666);
fopen("1.txt","w+") ?---> open("1.txt",O_RDWR|O_CREAT|O_TRUNC, 0666);
fopen("1.txt", "a") ?---> open("1.txt",O_WRONLY|O_APPEND|O_CREAT, 0666);
fopen("1.txt","a+") ?---> open("1.txt",O_RDWR|O_APPEND|O_CREAT, 0666);

//流指針 ?<----> ?文件描述符 ?
stdin ? ? ? ? ? ? ?0
stdout ? ? ? ? ? ? 1
stderr ? ? ? ? ? ? 2


實際的文件權限:
- rw- r-- r--?
110 100 100
6 ? 4 ? 4?


mode & ~umask?

110 110 110 mode?
000 010 010 umask?
111 101 101 ~umask?

110 110 110 mode?
& ? 111 101 101 ~umask?
-----------------
110 100 100 //644


ssize_t read(int fd, void *buf, size_t count);
功能:
從fd對應文件中讀取數據,讀count個字節,存放到buf指定的一塊空間?
參數:
@fd ? ?就是要讀取的文件?
@buf ? 存放數據的空間?
@count 要讀取的字節數
返回值;
成功 讀取到的字節數?
失敗 -1 &&errno?
練習:
cat //open + read?



注意:
read讀到的數據,如果要當作字符串處理,
注意,需要手動處理成字符串?
ssize_t write(int fd, const void *buf, size_t count);
功能:
從buf中獲得數據,寫count個字節到 fd對應文件中
參數:
@fd ? ?就是要寫的文件?
@buf ? 存放數據的空間?
@count 要寫入的字節數
返回值;
成功 寫入的字節數?
失敗 -1 &&errno ?

練習:
用read 和 write實現文件拷貝?



lseek

off_t lseek(int fd, off_t offset, int whence);
功能:
將fd定位到從whence開始的offset的位置?
參數:
@fd 文件?
@offset 偏移量?
@offset ? --- 偏移量?
>0 ? //需要考慮參考點是否可以?
<0?
@whence ? --- 參考點?
SEEK_SET ?//文件開頭?
SEEK_CUR ?//文件當前位置?
SEEK_END ?//文件結尾

定位開頭:
lseek(fd,0,SEEK_SET);
定位到末尾
lseek(fd,0,SEEK_END);

返回值:
成功 返回從文庫開頭到當前定位處的偏移量?
失敗 -1 && errno?

//獲得文件大小?
off_t len = lseek(fd,0,SEEK_END); //off_t //long int型?

?創建空洞:
1.定位?
2.寫操作?
write ??
練習:
輸入一個文件,創建一個 同樣大小的空洞文件?

功能:
統計行數?

fgets?

日志?
fd = open

read
fgets(fp);
fprintf()
write

標準IO --- FILE * fp
文件IO --- fd?


FILE *fp ---> fd?

int fileno(FILE *stream); //將FILE *fp 流指針轉換為 fd?
fd ---> FILE *fp?
FILE *fdopen(int fd, const char *mode);
功能:
將 fd 對應文件打開 關聯一個 FILE * 指針?


fd = ?open("1.txt",O_RDONLY);

fdopen(fd,"r+");

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

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

相關文章

Vue淺學

概述在最近的學習任務中了解了 Vue&#xff0c;并對其產生了濃厚的興趣&#xff0c;現在分享一下我的學習所得關鍵字其一statestate 是 Vuex 存儲中的“狀態對象”&#xff0c;用于存儲整個應用的共享數據&#xff08;如用戶信息、令牌、權限等&#xff09;&#xff0c;比如&am…

機器翻譯:Hugging Face庫詳解

文章目錄一、Hugging Face概述1.1 Hugging Face介紹1.2 核心理念&#xff1a;模型即服務&#xff0c;但以開源形式二、核心架構2.1 Transformers庫&#xff1a;模型交互的統一接口2.2 Datasets庫&#xff1a;高效的數據處理引擎2.3 Tokenizers庫&#xff1a;文本與模型的“翻譯…

服務器安裝gielab社區版

第一步&#xff1a;安裝Gitlab 1,使用的是CentOs鏡像(服務器最低配置為4核8g內存才行要不然帶不動) 登錄目標實例。 2,執行如下命令&#xff0c;安裝所需依賴。 1 sudo yum install -y curl policycoreutils-python openssh-server 3,執行如下命令&#xff0c;啟動SSH服務…

C#報錯:System.NullReferenceException:“未將對象引用設置到對象的實例。”

C#使用自定義的類創建數組時&#xff0c;使用時報錯&#xff0c;報錯內容如下圖&#xff1a;原因&#xff1a;C#中的數組是引用類型。當聲明自定義類數組時&#xff0c;數組本身會被創建&#xff0c;但其元素&#xff08;即自定義類的實例&#xff09;默認未被實例化&#xff0…

Maven 的 module 管理

一、Maven 的 module 管理 1. 什么是 Maven module&#xff1f; Maven module&#xff08;模塊&#xff09;&#xff0c;是 Maven 多模塊項目結構&#xff08;multi-module project&#xff09;中的核心概念。它允許你將一個大型項目拆分為若干獨立的小項目&#xff08;模塊&am…

現在都是APP,小程序搶購,支持瀏覽器不支持 SSE

在 APP 和小程序搶購場景中&#xff0c;通常不原生支持SSE&#xff08;Server-Sent Events&#xff09;&#xff0c;這與瀏覽器對 SSE 的支持情況不同&#xff0c;具體如下&#xff1a;APP&#xff1a;一般情況下&#xff0c;APP 端不支持原生 SSE。若使用 UniApp 開發&#xf…

Spring Boot 深度解析:從原理到實踐

一、Spring Boot 本質與核心價值 1.1 什么是 Spring Boot&#xff1f; Spring Boot 是 Spring 生態的革命性框架&#xff0c;旨在解決傳統 Spring 開發的復雜性。它通過"約定優于配置"&#xff08;Convention Over Configuration&#xff09;理念&#xff0c;提供開箱…

WebSocket-java篇

問題引入消息推送的方式我們要實現&#xff0c;服務器把消息推送到客戶端&#xff0c;可以輪訓&#xff0c;長輪訓還有sseWebSocket理論WebSocket 的由來與核心價值誕生背景&#xff1a;解決 HTTP 協議在實時通信中的固有缺陷&#xff08;單向請求-響應模式&#xff09;核心驅動…

用Python從零開始實現神經網絡

反向傳播算法用于經典的前饋人工神經網絡。 它仍然是訓練大型深度學習網絡的技術。 在這個教程中&#xff0c;你將學習如何用Python從頭開始實現神經網絡的反向傳播算法。 完成本教程后&#xff0c;您將了解&#xff1a; 如何將輸入前向傳播以計算輸出。如何反向傳播錯誤和…

算法148. 排序鏈表

題目&#xff1a;給你鏈表的頭結點 head &#xff0c;請將其按 升序 排列并返回 排序后的鏈表 。示例 1&#xff1a;輸入&#xff1a;head [4,2,1,3] 輸出&#xff1a;[1,2,3,4] 示例 2&#xff1a;輸入&#xff1a;head [-1,5,3,4,0] 輸出&#xff1a;[-1,0,3,4,5] 示例 3&a…

在騰訊云CodeBuddy上實現一個AI聊天助手

在騰訊云CodeBuddy上實現一個AI聊天助手項目 在當今數字化時代&#xff0c;AI聊天助手已經成為一種非常流行的應用&#xff0c;廣泛應用于客戶服務、智能助手等領域。今天&#xff0c;我們將通過騰訊云CodeBuddy平臺&#xff0c;實現一個基于Spring Boot和OpenAI API的AI聊天助…

JavaScript Array.prototype.flatMap ():數組 “扁平化 + 映射” 的高效組合拳

在 JavaScript 數組處理中&#xff0c;我們經常需要先對每個元素進行轉換&#xff08;映射&#xff09;&#xff0c;再將結果 “鋪平”&#xff08;扁平化&#xff09;。比如將數組中的每個字符串按空格拆分&#xff0c;然后合并成一個新數組。傳統做法是先用map()轉換&#xf…

區塊鏈與元宇宙:數字資產的守護者

1 區塊鏈支撐元宇宙數字資產的底層邏輯1.1 不可篡改性構建信任基石區塊鏈的不可篡改性為元宇宙數字資產提供了堅實的信任基礎。其核心在于分布式賬本技術&#xff0c;當一筆數字資產交易發生時&#xff0c;會被打包成區塊并廣播至網絡中的所有節點。每個節點都會對這筆交易進行…

Linux軟件編程:進程和線程(進程)

進程一、基本概念進程&#xff1a;是程序動態執行過程&#xff0c;包括創建、調度、消亡程序&#xff1a;存放在外存的一段數據的集合二、進程創建&#xff08;一&#xff09;進程空間分布每個進程運行起來后&#xff0c;操作系統開辟0-4G的虛擬空間進程空間&#xff1a;用戶空…

Mybatis學習筆記(五)

分頁插件與性能優化 分頁插件配置 簡要描述&#xff1a;MybatisPlus分頁插件是基于物理分頁實現的高性能分頁解決方案&#xff0c;支持多種數據庫的分頁語法&#xff0c;能夠自動識別數據庫類型并生成對應的分頁SQL。 核心概念&#xff1a; 物理分頁&#xff1a;直接在SQL層面進…

企業可商用的conda:「Miniforge」+「conda-forge」

文章目錄一、徹底卸載現有 Anaconda/Miniconda二、安裝 Miniforge&#xff08;推薦&#xff09;macOS/Linux檢查Windows檢查三、將通道固定為 conda-forge&#xff08;嚴格優先&#xff09;四、驗證是否仍引用 Anaconda 源五、常見問題&#xff08;FAQ&#xff09;六、參考命令…

Flutter ExpansionPanel組件(可收縮的列表)

可以展開或者收縮的面板組件&#xff0c;收縮面板組件效果由ExpansionPanelList組件和ExpansionPanel組件共同完成。 ExpansionPanelList屬性說明屬性說明children子元素expansionCallback設置回調事件ExpansionPanel屬性說明headerBuilder收縮的標題body內容isExpanded設置內容…

C/C++ 進階:深入解析 GCC:從源碼到可執行程序的魔法四步曲

引言距離上一篇博客更新已經過去了大概一兩周的時間&#xff0c;而對于 Linux 系統的基本指令以及 Shell 編程的學習其實基本講解完畢&#xff0c;Linux基礎一塊的知識就將告一段落了&#xff0c;如果有細節性的知識&#xff0c;我也會及時分享給各位&#xff0c;作為一名正在攀…

云服務器運行持續強化學習COOM框架的問題

1 環境要求 下載地址&#xff1a;https://github.com/TTomilin/COOM tensorflow 2.11以上 python 3.9以上 tensorflow2.12.0&#xff0c;需要安裝tensorflow-probability0.19 2 修改代碼 COOM/wrappers/reward.py 將 from gym import RewardWrapper修改為 from gymnasium impor…

MyBatis Interceptor 深度解析與應用實踐

MyBatis Interceptor 深度解析與應用實踐 一、MyBatis Interceptor概述 1.1 什么是MyBatis Interceptor MyBatis Interceptor&#xff0c;也稱為MyBatis 插件&#xff0c;是 MyBatis 提供的一種擴展機制&#xff0c;用于在 MyBatis 執行 SQL 的過程中插入自定義邏輯。它類似…