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 立即數...