下面是man手冊的章節號
我們可以通過man手冊來查詢系統函數man 2 open
open函數
//頭文件:
#include<fcntl.h>
#include<sys/types.h>
#include<sys/stat.h>
//功能:打開和創建文件(建立一個文件描述符,其他的函數可以通過文 件描述符對指定文件進行讀取與寫入的操作。)
原型
int open(const char*pathname,int flags); //文件存在
int open(const char*pathname,int flags,mode_t mode);//文件不存在
參數說明:
1.pathname
要打開或創建的目標文件
2.flags
打開文件時,可以傳入多個參數選項,用下面的
一個或者多個常量進行“或”運算,構成falgs
參數:
O_RDONLY: 只讀打開
O_WRONLY: 只寫打開
O_RDWR: 讀,寫打開
這三個常量,必須指定一個且只能指定一個,面的參數是可選的。
O_CREAT: 若文件不存在,則創建它,需要使
用mode選項。來指明新文件的訪問權限
O_APPEND: 追加寫,如果文件已經有內容,這次打開文件所
寫的數據附加到文件的末尾而不覆蓋原來的內容
3.mode
用來設置創建文件的權限(rwx)。當flags中帶有O_CREAT時纔有效。
標誌 說明 標誌 說明 標誌 說明
S_IRUSR 文件屬主可讀 S_IRGRP 文件所在組可讀 S_IROTH 其他用戶可讀
S_IWUSR 文件屬主可寫 S_IWGRP 文件所在組可寫 S_IWOTH 其他用戶可寫
S_IXUSR 文件屬主可執行 S_IWOTH 文件所在組可執行 S_IXOTH 其他用戶可執行
4.返回值:
調用成功時返回一個文件描述符fd
調用失敗時返回-1,並修改errno
舉例:
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdlib.h>
int main(){
int fd;
//hello.c已存在
fd = open("hello.c",O_RDWR);
if(fd == -1){
perror("open file");
exit(1);
}
close(fd);
}
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdlib.h>
int main(){
int fd;
//myhello.c文件不存在 權限777
fd = open("myhello.c",O_RDWR | O_CREAT,0777);
if(fd == -1){
perror("open file");
exit(1);
}
close(fd);
}
在open的參數中若文件不存在,創建文件是的權限並不是文件實際的權限,還需與本地掩碼結合。以上myhello.c爲例:
創建文件時權限是777,實際是
文件的實際權限 = 給定權限 & 本地掩碼(取反)
本地掩碼:查看命令umask
則上面myhello.c實際文件權限 = (111111111) & (~(000010010)) = 111101101
參考:https://blog.csdn.net/dangzhangjing97/article/details/79631173