ここではセクション番号があるのmanページ
、当社のシステム機能は、manページで照会することができますman 2 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);
}
ファイルが開いているパラメータに存在しない場合は、ファイルのアクセス権を作成し、ローカルマスクと組み合わせる必要実際のファイルのアクセス権はありません。上記の例Myhello.c:
あなたは、ファイルのパーミッションは777で作成すると、実際は
許可=&ローカルマスク(反転)与えられた実際のファイルのパーミッション
ローカルマスク:表示するには、umaskコマンド
myhello.c上記の実際のファイルのパーミッションを=(111111111 )&(〜(000010010))= 111 101 101
参考ます。https://blog.csdn.net/dangzhangjing97/article/details/79631173