嵌入式觀察4

姓名:徐哲? ? 學(xué)號(hào):19029100016? ? 學(xué)院:電子工程學(xué)院

引自:https://blog.csdn.net/qq_41035588/article/details/92002740

【嵌牛導(dǎo)讀】本文介紹了嵌入式的知識(shí)點(diǎn)

【嵌牛鼻子】嵌入式系統(tǒng)與linux

【嵌牛提問(wèn)】何為嵌入式開發(fā)模式?

【嵌牛正文】

1、linux文件編程概述

(1)文件描述符:Linux中文件分為4種:普通文件、目錄文件、鏈接文件、設(shè)備文件要區(qū)分這些文件就要了解“文件描述符”;

文件描述符是一個(gè)非負(fù)的整數(shù),他是一個(gè)索引值,并指向內(nèi)核中每個(gè)進(jìn)程打開文件的記錄表。當(dāng)打開一個(gè)現(xiàn)存文件或創(chuàng)建一個(gè)新文件時(shí),內(nèi)核就向進(jìn)程返回一個(gè)文件描述符,當(dāng)需要讀/寫文件時(shí),也需要把文件描述符作為參數(shù)傳遞給相應(yīng)的函數(shù)。

(2)基本I/O操作

Linux的輸入/輸出(I/O)操作,通常為5個(gè)方面:打開,讀取,寫入,和關(guān)閉

對(duì)應(yīng)的有5個(gè)系統(tǒng)調(diào)用:

open,read,write,close,lseek

所需要的頭文件:

#include <sys/types.h>

#include <unistd.h>

1.open函數(shù)

open函數(shù)的原型如下:

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

函數(shù)傳入?yún)?shù)含義如下:

pathname:為字符串,表示被打開的文件名稱,可以包含路徑。

flags :為一個(gè)或多個(gè)標(biāo)志,表示文件的打開方式,常用標(biāo)志如表所示:

O_RDONLY 只讀方式打開

O_WRONLY 只寫方式打開

O_RDWR  讀/寫方式打開

O_CREAT 如果文件不存在,就創(chuàng)建新的文件

O_EXCL 如果使用O_CREAT時(shí)文件存在,則可返回錯(cuò)誤消息

O_TRUNC  如果文件已存在,且以只讀或只寫成功打開,則先全部刪除文件中原有的數(shù)據(jù)

O_APPEND  以添加方式打開文件,在打開文件的同時(shí),文件指針指向文件的末尾、

注意:在open函數(shù)中,flags參數(shù)可以用過(guò)“|”組合而成,O_RDONLY,O_WRONLY,O_RDWR這三種方式是互斥的,不可同時(shí)使用,因此這3個(gè)參數(shù)只能出現(xiàn)一個(gè)。

mode 被打開文件的存取權(quán)限模式,可以使用八進(jìn)制數(shù)來(lái)表示新文件的權(quán)限,也可以采用<sys/stat.h>中定義的符號(hào)常量,當(dāng)打開已有文件時(shí),將忽略這個(gè)參數(shù),函數(shù)返回值:成功則返回文件描述符,出錯(cuò)返回-1。

文件模式符號(hào)常量:

S_IRWXU   00700    所屬用戶讀。寫和執(zhí)行權(quán)限

S_IRUSR   00400   所屬用戶讀權(quán)限

S_IWUSR   00200   所屬用戶寫權(quán)限

S_IXUSR   00100   所屬用戶執(zhí)行權(quán)限

S_IRWXG  00070   組用戶讀,寫和執(zhí)行權(quán)限

S_IRGRP   00040   組用戶讀權(quán)限

S_IWGRP   00020  組用戶寫權(quán)限

S_IXGRP   00010  組用戶執(zhí)行權(quán)限

S_IRWXO  00007  其他用戶讀,寫和執(zhí)行權(quán)限

S_IROTH  00004  其他用戶讀權(quán)限

S_IWOTH  00002  其他用戶寫權(quán)限

S_IXOTH  00001  其他用戶執(zhí)行權(quán)限

2.read和write函數(shù)

函數(shù)原型如下:

ssize_t read(int fd, void *buf,size_t count)

ssize_t write(int fd,const void *buf, size_t count)

函數(shù)傳入?yún)?shù)含義如下:

fd 文件描述符

buf 指定存儲(chǔ)器獨(dú)處數(shù)據(jù)的緩沖區(qū)

count 指定讀出或?qū)懭氲淖止?jié)數(shù)

3.close函數(shù)

當(dāng)使用完文件時(shí)可以使用close關(guān)閉文件,close會(huì)讓緩沖區(qū)中的數(shù)據(jù)寫回磁盤,并釋放文件所占的資源,close的原型如下:

int close(int fd)

函數(shù)傳入?yún)?shù):fd文件描述符

函數(shù)返回值:若文件順利關(guān)閉則返回0,發(fā)生錯(cuò)誤則返回-1,并置errno,通常文件在關(guān)閉時(shí)出錯(cuò)是不常見的,但也不是不可能的情況,他別是在關(guān)閉通過(guò)網(wǎng)絡(luò)訪問(wèn)的文件時(shí)就會(huì)出現(xiàn)這種情況。

4.lseek函數(shù)

主要用于移動(dòng)文件讀寫指針,主要用于獲取文件大小和拓展文件(先分配空間、然后再填充內(nèi)容),函數(shù)原型如下:

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

參數(shù) fd:文件描述符。

offset:偏移量,每一讀寫操作所需要移動(dòng)的距離,單位是字節(jié)的數(shù)量,可正可負(fù)(向前移,向后移)

whence

(當(dāng)前位置基點(diǎn)): SEEK_SET:當(dāng)前位置為文件的開頭,新位置為偏移量的大小。

SEEK_CUR:當(dāng)前位置為文件指針的位置,新位置為當(dāng)前位置加上偏移量。

SEEK_END:當(dāng)前位置為文件的結(jié)尾,新位置為文件的大小加上偏移量的大小。

返回值 成功:文件的當(dāng)前位移

-1:出錯(cuò)

實(shí)例:(1)參考實(shí)驗(yàn)2:linux文件編程;

(2)網(wǎng)盤:/linux編程源代碼/IO(readwrite、fcntl)下相關(guān)代碼

作者album

鏈接:https://blog.csdn.net/qq_41035588/article/details/92002740

來(lái)源:簡(jiǎn)書

著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容