第3章 文件I/O

3.3 函数open和openat

     调用open或openat函数可以打开或创建一个文件。

#Iinclude <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

     我们将最后一个参数写成..., ISO C 用这种方法表明余下的参数的数量及其类型是可变的。对于open函数而言,仅当创建新文件时才使用最后一个参数(稍后将对此进行说明)。在函数类型中将此参数放置在注释中。

    path参数是要打开或创建文件的名字。oflag参数可用来说明此函数的多个选项。用下列一个或多个常量进行“或”运算构成oflag参数(这些常量在头文件<fcntl.h>中定义)。

   由open和openat函数返回的文件描述符一定是最小的未用描述符数值。这一点被某些应用程序用来在标准输入、标准输出或标准错误上打开新的文件。例如,一个应用程序可以先关闭标准输出(通常是文件描述符1),然后打开另一个文件,执行打开操作前就能了解到该文件一定会在文件描述符1上打开。在3.12节说明dup2函数时,可以了解到有更好的方法来保证在给定的描述符上打开一个文件。

    fd参数把open和openat函数区分开,共有3种可能性。

  (1)path参数指定的是绝对路径名,在这种情况下,fd参数被忽略,openat函数就相当于open函数。

  (2)path参数指定的是相对路径名,fd参数指出了相对路径名在文件系统中的开始地址。fd参数是通过打开相对路径名所在的目录来获取。

   (3)path参数指定了相对路径名,fd参数具有特殊值AT_FDCWD。在这种情况下,路径名在当前工作目录中获取,openat函数在操作上与open函数类似。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值