#include <fcntl.h>
int open(const char *path, int flags);
int open(const char *path, int flags, mode_t mode);
open()
函数接受两个或三个参数:
path
:要打开的文件路径名。flags
:用于指定文件的打开模式和操作标志的参数。mode
(可选):如果需要创建新文件,则指定文件的权限。
flags
参数可通过以下常量进行逻辑或运算组合使用(多个选项的组合方式使用 |
连接):
O_RDONLY
:只读模式,打开文件后只能读取。O_WRONLY
:只写模式,打开文件后只能写入。O_RDWR
:读写模式,打开文件后可读取和写入。O_CREAT
:如果文件不存在,则创建文件。O_EXCL
:与O_CREAT
一起使用,如果文件存在则返回错误。O_TRUNC
:如果文件已存在,在打开文件时将其截断为空文件。通俗说就是打开文件里边原有的东西会被清空。O_APPEND
:在每次写入文件时都追加到文件末尾。O_NONBLOCK
:非阻塞模式打开文件。O_SYNC
:以同步 I/O 的方式打开文件。
mode
参数只有在 O_CREAT
被设置时才需要指定,它用于指定新文件的权限。常用的权限选项包括 S_IRUSR
(所有者可读)、S_IWUSR
(所有者可写)和 S_IXUSR
(所有者可执行)。可以通过逻辑或运算将这些权限组合在一起。
open()
函数的返回值为文件描述符(file descriptor),它是一个非负整数,用于标识打开文件的记录。
下面是几个常见使用方法
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
int main(void)
{
int fd;
fd = open("./file1",O_RDWR);//已可读可写的方式打开已经存在的文件file1
printf("fp=%d",fd); //打印文件描述符
return 0;
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
int main(void)
{
int fd;
fd = open("./file1",O_RDWR);
if(fd==-1) //文件不存在
printf("fd=%d open file1 fail\n",fd);
fd = open("./file1",O_RDWR|O_CREAT,0600);//在file1不存在的情况下,以可读可写的方式创建
//file1
printf("fd=%d open file1 SUCCESS\n",fd);
return 0;
}
在上面的代码中,0600 是用于设置文件权限的参数。它表示八进制形式的权限值。
在Linux系统中,文件权限由三个数字组成,分别表示所有者(user)、所属组(group)和其他人(others)的权限。每个数字都是一个三位二进制数,其中每一位代表不同的权限。具体如下:
第一位:读权限(Read permission)
第二位:写权限(Write permission)
第三位:执行权限(Execute permission)
上述权限位可以通过以下值进行组合:
4:读权限
2:写权限
1:执行权限
因此,0600 中的 0 表示没有设置特殊权限,6 表示所有者拥有读取和写入的权限,而没有执行权限。
将权限值转换为二进制形式,可以得到 110 000 000,对应于 rw------- 权限,意味着只有文件所有者可以读取和写入该文件,而其他用户没有任何权限。
因此,fd = open("./file1", O_RDWR | O_CREAT, 0600) 的代码表示以读写模式打开文件 "./file1",如果文件不存在则创建它,并将文件的权限设置为 rw-------。最终,返回的文件描述符被赋值给变量 fd,以便后续对文件进行操作。
20230811