1.函數(shù)概述
open()是 Linux/Unix 內(nèi)核提供的底層系統(tǒng)調(diào)用,核心功能是打開或創(chuàng)建文件。成功調(diào)用后,內(nèi)核會(huì)返回一個(gè)整型的文件描述符作為該文件的句柄,后續(xù)的所有讀寫操作都基于此描述符進(jìn)行。調(diào)用時(shí)需指定訪問(wèn)模式(如O_RDONLY),以決定程序操作文件內(nèi)容的權(quán)限。
2.頭文件
使用open()函數(shù)前,需要包含以下頭文件:
#include #include #include
3.函數(shù)原型
int open(const char *pathname, int flags); int open(const char *pathname, int flags, mode_t mode);
4.參數(shù)說(shuō)明
4.1pathname
表示要打開的文件路徑,可以是絕對(duì)路徑或相對(duì)路徑。
4.2flags
用于指定文件的打開方式,分為互斥模式和可選標(biāo)志兩類。
互斥模式(必須選擇一種):

可選標(biāo)志(通過(guò)位或|與互斥模式組合):

4.3mode
僅在flags包含O_CREAT時(shí)有效,用于設(shè)置新建文件的權(quán)限。
mode_t為32位無(wú)符號(hào)整數(shù),僅低12位有效,分為四組(共12位):

每組3位分別對(duì)應(yīng)讀(r=4)、寫(w=2)、執(zhí)行(x=1)權(quán)限。
例如0644表示用戶可讀寫,組用戶和其他用戶只可讀。
5.返回值
成功:返回文件描述符(非負(fù)整數(shù))
失敗:返回-1
6.實(shí)戰(zhàn)示例
下面通過(guò)一個(gè)具體的例子展示如何以不同方式打開文件,并輸出對(duì)應(yīng)的文件描述符。
6.1創(chuàng)建代碼文件
在/home/elf/work目錄下新建open.c文件,內(nèi)容如下:
#include #include #include #include int main() { // 只讀打開,不存在則創(chuàng)建,權(quán)限 644 int fd1 = open("./test1", O_RDONLY | O_CREAT, 0644); // 只讀打開,若存在則清空,權(quán)限 644 int fd2 = open("./test2", O_RDONLY | O_CREAT | O_TRUNC, 0644); // 讀寫打開,不存在則創(chuàng)建,權(quán)限 664 int fd3 = open("./test3", O_RDWR | O_CREAT, 0664); // 讀寫打開,若存在則清空,權(quán)限 666 int fd4 = open("./test4", O_RDWR | O_CREAT | O_TRUNC, 0666); printf("fd1: %d\n", fd1); printf("fd2: %d\n", fd2); printf("fd3: %d\n", fd3); printf("fd4: %d\n", fd4); return 0; }
6.2編譯與運(yùn)行
elf@ubuntu:~/work$ gcc open.c -o open elf@ubuntu:~/work$ ./open
7.運(yùn)行結(jié)果
程序運(yùn)行后,輸出如下:
fd1: 3 fd2: 4 fd3: 5 fd4: 6
說(shuō)明:文件描述符從3開始分配,因?yàn)?、1、2通常被系統(tǒng)預(yù)留給標(biāo)準(zhǔn)輸入(stdin)、標(biāo)準(zhǔn)輸出(stdout)和標(biāo)準(zhǔn)錯(cuò)誤(stderr)。
8.總結(jié)
open()是Linux系統(tǒng)I/O操作的基礎(chǔ)函數(shù),通過(guò)靈活組合flags參數(shù)可實(shí)現(xiàn)多種文件打開方式。理解并正確使用open()是進(jìn)行文件操作、進(jìn)程間通信和系統(tǒng)編程的重要前提。在實(shí)際開發(fā)中,應(yīng)注意錯(cuò)誤處理,并確保在不再需要文件描述符時(shí)使用 close()函數(shù)及時(shí)關(guān)閉文件,避免資源泄漏。希望本篇文章能為各位小伙伴的實(shí)際開發(fā)帶來(lái)幫助,如果在操作中遇到任何疑問(wèn),歡迎隨時(shí)交流討論。
-
單片機(jī)
+關(guān)注
關(guān)注
6076文章
45492瀏覽量
670138 -
嵌入式
+關(guān)注
關(guān)注
5198文章
20435瀏覽量
333902 -
開發(fā)板
+關(guān)注
關(guān)注
26文章
6288瀏覽量
117999 -
Open
+關(guān)注
關(guān)注
0文章
24瀏覽量
11413 -
RK3588
+關(guān)注
關(guān)注
8文章
555瀏覽量
7314
發(fā)布評(píng)論請(qǐng)先 登錄
嵌入式教育科普|GPIO接口全面解析
ElfBoard嵌入式教育科普|ADC接口全面解析
ElfBoard嵌入式教育科普|CAN接口全面解析
[分享資料]嵌入式Linux應(yīng)用程序開發(fā)詳解
轉(zhuǎn):嵌入式Linux應(yīng)用程序開發(fā)詳解
ARM嵌入式Linux系統(tǒng)開發(fā)詳解
嵌入式Linux應(yīng)用程序開發(fā)詳解
(網(wǎng)盤)ARM嵌入式Linux系統(tǒng)開發(fā)詳解
嵌入式linux應(yīng)用程序開發(fā)標(biāo)準(zhǔn)教程pdf,嵌入式LINUX應(yīng)用程序開發(fā)標(biāo)準(zhǔn)教程-華清遠(yuǎn)見.PDF...
嵌入式open函數(shù)的使用
ElfBoard嵌入式教育科普|UART接口全面解析
ElfBoard嵌入式教育科普|Linux系統(tǒng)I/O接口:Open函數(shù)詳解
評(píng)論