open()与openat()

open或openat函数都是打开或者创建一个文件的函数

#include<fcntl.h>

int open(const char *path, int aflag, .../*mode_t mode*/);
int openat(int fd, const char *path, int aflag, .../*mode_t mode*/);

参数介绍:

path:要打开或者创建的文件名

aflag:对将要操作的文件(即path参数所代表的文件)设置一些属性,常用属性如下

  • 必要属性(必须设置且只能设置一个的属性):
  1. O_RDONLY 只读打开
  2. O_WRONLY 只写打开
  3. O_RDWR 可读可写打开
  4. O_EXEC 只执行打开
  5. O_SEARCH 只搜索打开(用于目录)
  • 常用可选属性(可设置零个或多个的属性)
  1. O_APPEND 每次写时都追加到文件的末尾
  2. O_CREAT 若文件不存在则创建该文件
  3. O_NONBLOCK 如果打开的为特殊文件,则该文件的后续 I/O 操作为非阻塞方式
  4. O_TRUNC 如果此文件存在,且只写或读-写打开,则将其长度截断为0
  5. O_EXCL 如果同时指定了O_CREAT,而文件已经存在,则出错。用于检验文件是否存在

...(省略号):表示在创建文件时需要设置的文件权限

fd文件描述符(openat函数):表示当path为相对路径时,fd为该路径在文件系统中的开始地址

技巧:

由open和openat函数返回的文件描述符一定是最小未用描述符数值

open与openat的区别:

  1.      如果path参数为绝对路径名,则fd参数将被忽略,此时两函数等价
  2. 如果path参数为相对路径名,则fd参数指出相对路径名在文件系统中的开始地址,fd参数是通过打开相对路径名所在的目录名获取的(对于这一点我一直有个疑问,既然我都知道了路径名所在目录,那我完全可以用字符串连接函数得到绝对路径名,感觉openat有点多余)
  3. path参数制定了相对路径名,fd参数具有特殊值AT_FDCWD。这种情况下路径名在当前工作目录中获取,openat函数在操作上与open类似

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值