Unix/Linux下的open函数(O_CREAT和O_EXCL)

open 函数可以打开或创建一个文件。
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);
返回值:成功返回新分配的文件描述符,出错返回-1并设置errno
在Man Page中open 函数有两种形式,一种带两个参数,一种带三个参数,其实在C代码
中open 函数是这样声明的:
int open(const char *pathname, int flags, ...);
最后的可变参数可以是0个或1个,由flags 参数中的标志位决定,见下面的详细说明。
pathname 参数是要打开或创建的文件名,和fopen 一样,pathname 既可以是相对路径也可以是绝
对路径。flags 参数有一系列常数值可供选择,可以同时选择多个常数用按位或运算符连接起
来,所以这些常数的宏定义都以O_开头,表示or。
必选项:以下三个常数中必须指定一个,且仅允许指定一个。
O_RDONLY 只读打开
O_WRONLY 只写打开
O_RDWR  可读可写打开
以下可选项可以同时指定0个或多个,和必选项按位或起来作为flags 参数。可选项有很多,这
里只介绍一部分,其它选项可参考open(2)的Man Page:
O_APPEND   表示追加。如果文件已有内容,这次打开文件所写的数据附加到文件的末尾而不
                     覆盖原来的内容。
O_CREAT 若此文件不存在则创建它。使用此选项时需要提供第三个参数mode ,表示该文件
                 的访问权限。
O_EXCL 如果同时指定了O_CREAT,并且文件已存在,则出错返回。
O_TRUNC  如果文件已存在,并且以只写或可读可写方式打开,则将其长度截断
                   (Truncate)为0字节。
O_NONBLOCK 对于设备文件,以O_NONBLOCK 方式打开可以做非阻塞I/O(Nonblock I/O),非
                        阻塞I/O在下一节详细讲解。
  • 8
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
引用\[1\]中的代码展示了使用open函数打开文件的示例。在这个例子中,open函数的返回值被保存在一个int类型的变量fd中。这是因为在Ubuntu中,open函数的返回值是一个int类型的文件描述符,用于标识打开的文件。通过指定文件名、打开模式和权限,可以使用open函数打开文件。在这个例子中,使用了O_CREAT标志来指示如果文件不存在,则创建文件。权限参数指定了文件的权限,0666表示文件可读可写。如果open函数执行成功,返回的文件描述符将大于等于0,否则返回-1。\[1\] 引用\[2\]提供了open函数的简要说明。open函数UNIX系统的系统调用函数,用于打开文件。它的参数包括文件名和打开模式。open函数的返回值是一个int类型的文件描述符,用于标识打开的文件。\[2\] 引用\[3\]中的代码展示了fopenopen函数的区别。在使用fopen函数打开文件时,如果文件不存在,它会自动创建文件。而使用open函数打开文件时,必须明确指定O_CREAT标志才会创建文件,否则文件不存在时会返回错误。\[3\] 综上所述,open函数是一个UNIX系统的系统调用函数,用于打开文件。它的返回值是一个int类型的文件描述符,用于标识打开的文件。与fopen函数相比,open函数需要明确指定O_CREAT标志才会创建文件。 #### 引用[.reference_title] - *1* [嵌入式函数linux系统编程---2 文件IO之open函数](https://blog.csdn.net/qq_42822743/article/details/123449151)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [open函数的使用](https://blog.csdn.net/weixin_36209467/article/details/105194899)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值