open and openat
调用open和openat函数可以打开或创建一个文件
#include <fcntl.h>
int open(const char *path, int oflag, .../*mode_t mode*/);
int openat(int fd, const char *path, int oflag, .../*mode_t mode*/);
返回值:成功,返回文件描述符;出错,返回-1
参数:
path:要打开或创建的文件名
oflag:用来说明此函数的多个选项。用下列一个或多个常量进行“或”运算构成
O_RDONLY 只读打开
O_WRONLY 只写打开
O_RDWR 读,写打开
O_EXEC 只执行打开
O_SEARHC 只搜索打开(用于目录)
O_APPEND 每次写时追加到文件的尾端
O_CLOEXEC
O_CREAT 如果该文件不存在则创建它。
O_DIRECTOR
O_EXCL 当指定了O_CREAT|O_EXCL时,如果文件已经存在,则出错
O_NOCTTY
O_NOFOLLW
O_NONBLOCK
O_SYNC
O_TRUNC 如果该文件已经存在,而且为只写或读、写成功打开,则将其长度截断为0。(相当于覆盖原有内容,重新写入)
O_TTY_INIT
O_DSYNC
O_RSYNC
fd:fd参数把open和openat函数区分开来
(1)path参数指定为绝对路径名时,fd会被忽略,openat函数就相当于open函数
(2)path参数指定为相对路径名时,fd参数指出了相对路径名在文件系统的开始地址。fd参数是通过打开相对路径名所在的目录来获取。(如果有点迷糊,请看下一条)
(3)path参数指定了相对路径名,fd参数具有特殊值AT_FDCWD。在这种情况下,路径名在当前工作目录中获取,openat函数在操作上与open函数类似。
注:
①有open和openat函数返回的文件描述符一定是最小的,未使用的描述符值。
②只有在创建新的文件时才会使用最后一个参数。
例子: