open() 函数是 C/C++ 标准库中的一个 POSIX 标准函数,用于打开一个文件并返回一个文件描述符(File Descriptor)以供后续的读写操作,其函数声明如下:
#include <fcntl.h>
int open(const char* path, int flags, mode_t mode);
其中,第二个参数 flags 是一个掩码,用于指定打开文件时所使用的访问模式和选项。常用的几个 flags 宏定义包括:
O_RDONLY
:以只读模式打开文件。相应的文件必须存在,否则打开操作会失败。
O_WRONLY
:以只写模式打开文件。相应的文件必须存在,否则打开操作会失败。
O_RDWR
:以读写模式打开文件。相应的文件必须存在,否则打开操作会失败。
O_CREAT
:如果指定的文件不存在,则创建一个新的文件。如果文件已经存在,则不执行任何操作。需要指定文件的访问权限,通常使用权限掩码 S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH,表示用户、用户组和其他用户都有读写权限。
O_TRUNC
:如果文件已经存在,则将该文件的长度截短至零字节。如果文件不存在,则忽略该选项。
O_APPEND
:打开文件时,将文件偏移量设置为文件末尾。在写入文件时,所有的数据都将被写入到文件的末尾,而不是覆盖文件中已有的数据。
flags 参数可以通过 | 运算符进行组合,以选择需要的访问模式和选项。例如,以下代码将以读写模式打开一个文件,如果文件不存在则创建该文件,并在写入文件时自动追加到文件的末尾:
int fd = open("example.txt", O_RDWR | O_CREAT | O_APPEND, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);
此时返回的文件描述符 fd 可以用于后续的读写操作。注意,如果打开文件失败,open() 函数将返回 -1,这时需要根据 errno 变量的值来确定错误的原因,并采取必要的补救措施。