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函数返回的文件描述符一定是最小的,未使用的描述符值。

  ②只有在创建新的文件时才会使用最后一个参数。

例子:

posted on 2019-05-25 21:54  dogpi  阅读(685)  评论(0编辑  收藏  举报

导航