嵌入式Linux學習筆記之第二階段 檔案I O

2022-09-13 20:00:11 字數 2127 閱讀 4130

1、檔案io的四個函式

一些術語:

不帶緩衝的i/o:

每個read和write都呼叫核心中的乙個系統呼叫。

檔案描述符:

乙個非負整數,對核心而言,所以開啟的檔案都通過檔案描述符引用。

①開啟或建立乙個檔案 open(char *path, flag, mode) 在fcntl.**件中宣告

int openat(int fd, const char *path, int flag......)

open 與 openat的區別:①路徑,path指定是絕對路徑時open==openat;openat可以讓執行緒使用相對路徑名開啟目錄中的檔案,而不再只能開啟當前工作目錄;

返回值:

成功:檔案描述符,非負正整數,檔案的id號(ls -lai可以查詢)

出錯:-1  

②write(int fd, void *buf, size_t count)

fd:寫到哪個檔案

*buf:要寫的內容

count:寫多少位元組

返回值:實際寫的位元組數

③read(int fd, void *buf, size_t count) --和write差不多

④close(int fd)

2、因為檔案存在讀寫位置指標,所以需要lseek調整讀寫位置指標:

lseek(int fd, off_t offset, int whence),

該函式的標頭檔案:sys/types.h unistd.h

offset:偏移量,單位是位元組的數量,可正可負

whence:當前位置的基點,有三個標誌

seek_set:當前位置為檔案的開頭,新位置為偏移量的大小

seek_cur:當前位置為檔案指標的位置,新位置為當前位置加偏移量

ssk_end:當前位置為檔案的結尾,新位置為當前位置加偏移量

返回值:成功:檔案當前的位置(新的檔案偏移量)  出錯:-1

允許檔案構成乙個空洞。(lseek和write相互作用),空洞不占用儲存區。

可以  od -c +檔案  以字元方式列印檔案內容

2、檔案共享

不同程序間共享開啟檔案

核心為所有開啟的檔案維持一張檔案表(同乙個檔案可以被開啟多次,所以同乙個檔案可以在檔案表中占有多項)。每個檔案表項包含:

(a)、檔案狀態標誌(讀、寫、添寫、同步和非阻塞等)

(b)、當前檔案偏移量(不同的程序當前的檔案偏移量是不同的,你想兩個不同的程序對同乙個檔案的操作可能都不一樣,那當然檔案偏移量是不一樣的)

(c)、指向該檔案的v節點表項的指標。

3、原子操作

比如open函式的o_creat和o_excl。

函式pread和pwrite(先呼叫lseek後呼叫read或者write)

4、函式dup和dup2:複製乙個現有的檔案描述符

#include

int dup(int fd)

int dup2(int fd, int fd2)

5、函式sync、fsync和fdatasync:向檔案寫入資料時,核心先把資料複製到緩衝區中,然後排入佇列,晚些再寫入磁碟。

#include

int fsync(int fd)  對指定的檔案起作用,等待寫磁碟操作結束才返回

int fdatasync(int fd)  

int sync(void)  把快緩衝區寫入佇列,不等待實際寫磁碟操作結束,並立即返回

6、函式fcntl:可以改變已經開啟檔案的屬性

#include

int fcntl(int fd, int cmd, ...)

7、函式ioctl

#include

#include

int ioctl(int fd, int request, ...)

i/o操作的雜物箱

嵌入式學習筆記 第二週

1.嵌入式網路程式設計 嵌入式linux c系統程式設計 檔案 程序 程序間通訊 多執行緒 網路 大併發網路伺服器 資料庫 shell程式設計 2.嵌入式c開發vs嵌入式linuxc 使用linux作業系統提供的功能 檔案 多工 網路聊天室 嵌入式linux應用軟體開發 3.linux作業系統的組成...

嵌入式Linux學習筆記

嵌入式linux學習筆記 學習 一 linux的優勢 1 廣泛的硬體支援 linux能夠支援x86 arm mips alpha powerpc等多種體系結構,目前已經成功移植到數十種硬體平台,幾乎能夠執行在所有流行的cpu上。linux有著異常豐富的驅動程式資源,支援各種主流硬體裝置和最新硬體技術...

嵌入式linux學習筆記

1 溢位 兩個數相加,如果最高位的進製和此高位的進製不同,則產生溢位。2 進製和溢位的概念不一樣。3 預取 取得是編譯後得到的機器 解碼 執行 4 arm的彙編指令長度是確定的,32位。5 一條彙編指令 條件碼 4bit 操作碼 分類碼 s 1bit 目的暫存器 4bit 源暫存器 4bit 立即數...