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

可選標志(通過位或|與互斥模式組合):

4.3mode
僅在flags包含O_CREAT時有效,用于設置新建文件的權限。
mode_t為32位無符號整數,僅低12位有效,分為四組(共12位):

每組3位分別對應讀(r=4)、寫(w=2)、執行(x=1)權限。
例如0644表示用戶可讀寫,組用戶和其他用戶只可讀。
5.返回值
成功:返回文件描述符(非負整數)
失敗:返回-1
6.實戰示例
下面通過一個具體的例子展示如何以不同方式打開文件,并輸出對應的文件描述符。
6.1創建代碼文件
在/home/elf/work目錄下新建open.c文件,內容如下:
#include #include #include #include int main() { // 只讀打開,不存在則創建,權限 644 int fd1 = open("./test1", O_RDONLY | O_CREAT, 0644); // 只讀打開,若存在則清空,權限 644 int fd2 = open("./test2", O_RDONLY | O_CREAT | O_TRUNC, 0644); // 讀寫打開,不存在則創建,權限 664 int fd3 = open("./test3", O_RDWR | O_CREAT, 0664); // 讀寫打開,若存在則清空,權限 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編譯與運行
elf@ubuntu:~/work$ gcc open.c -o open elf@ubuntu:~/work$ ./open
7.運行結果
程序運行后,輸出如下:
fd1: 3 fd2: 4 fd3: 5 fd4: 6
說明:文件描述符從3開始分配,因為0、1、2通常被系統預留給標準輸入(stdin)、標準輸出(stdout)和標準錯誤(stderr)。
8.總結
open()是Linux系統I/O操作的基礎函數,通過靈活組合flags參數可實現多種文件打開方式。理解并正確使用open()是進行文件操作、進程間通信和系統編程的重要前提。在實際開發中,應注意錯誤處理,并確保在不再需要文件描述符時使用 close()函數及時關閉文件,避免資源泄漏。希望本篇文章能為各位小伙伴的實際開發帶來幫助,如果在操作中遇到任何疑問,歡迎隨時交流討論。
-
單片機
+關注
關注
6076文章
45494瀏覽量
670258 -
嵌入式
+關注
關注
5198文章
20442瀏覽量
333967 -
開發板
+關注
關注
26文章
6289瀏覽量
118041 -
Open
+關注
關注
0文章
24瀏覽量
11417 -
RK3588
+關注
關注
8文章
556瀏覽量
7319
發布評論請先 登錄
嵌入式教育科普|GPIO接口全面解析
ElfBoard嵌入式教育科普|ADC接口全面解析
ElfBoard嵌入式教育科普|CAN接口全面解析
ARM嵌入式Linux系統開發詳解
嵌入式linux應用程序開發標準教程pdf,嵌入式LINUX應用程序開發標準教程-華清遠見.PDF...
ElfBoard嵌入式教育科普|UART接口全面解析
ElfBoard嵌入式教育科普|Linux系統I/O接口:Open函數詳解
評論