调用open或openat函数可以打开或创建一个文件。
#include<fnctl.h>
int open(const char *path, int oflag,.../* mode_t mode */);
int openat(int fd, const char *path, int oflag, .../* mode_t mode */);
参数:
path:要打开或创建的文件。
oflag:用来说明此函数的多个选项,由指定的一个或多个常量进行“或"运算构成oflag参数。
读写模式常量:(这5个常量中必须指定一个且只能指定一个)。
常量 | 含义 |
---|---|
O_RDONLY | 只读打开 |
O_WRONLY | 只写打开 |
O_RDWR | 读、写打开 |
O_EXEC | 只执行打开 |
O_SEARCH | 只搜索打开 |
下列常量是可选的:
常量 | 含义 |
---|---|
O_APPEND | 每次写时都追加到文件的尾端 |
O_CLOEXEC | 把FD_CLOEXEC常量设置为文件描述符标志 |
O_CREAT | 若此文件不存在则创建它 |
O_DIRECTORY | 如果path引用的不是目录,则出错 |
O_EXCL | 如果同时指定了O_CREAT,而文件已存在,则出错 |
O_NOCTTY | 如果path引用的是终端设备,则不将该设备分配作为此进程的控制终端 |
O_NOFOLLOW | 如果path引用的是一个符号链接,则出错 |
O_NONBLOCK | 如果path引用的是一个FIFO、一个块特殊文件或一个字符特殊文件,则设置打开/后续操作为非阻塞方式 |
O_SYNC | 每次write等待物理I/O完成,更新所需的I/O |
O_TRUNC | 如果此文件存在,而且为只写或读-写成功打开,则将其长度截断为0 |
O_TTY_INIT | 如果打开一个还未打开的终端设备,设置非标准termios参数值,使其符号Simple Unix Specification |
fd:fd将open和openat区分,共有3种情况。
(1)path指定的是绝对路径名,fd被忽略,openat相当于open。
(2)path指定的是相对路径名,fd指出相对路径名在文件系统中的开始地址(在path的基础上打开fd)。
(3)path指定的是相对路径名,fd为AT_FDCWD,路径名在当前工作目录获取,openat在操作上与open函数类似。
返回值:
成功,则返回文件描述符;
出错,返回-1.
#include<fcntl.h>
int main()
{
open("test.txt",O_RDONLY);
return 0;
}
函数close
#include<unistd.h>
int close(int fd);
关闭一个打开文件。