open函数
int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);
- 功能: 既能打开一个已存在的文件,也能创建并打开一个新的文件
- 返回值:
- 成功则返回一个最小且未被占用的文件描述符,用于后续函数调用中指代该文件
- 若发生错误,则返回-1,并将errno置为相应的错误标志
- pathname参数:要打开的文件由pathname来标识,若pathname是一个符号链接,会对其进行解引用
- flags必选项:它是位掩码,用于指定文件的访问方式,从以下3个选项3选1作为flags参数,且只能选一个
- O_RDONLY, // 只读方式打开文件
- O_WRONLY, // 只写方式打开文件
- O_RDWR. // 读写方式打开文件
- flag可选项:可选择0或多个与必选项按位或起来作为falgs参数
- O_APPEND:表示追加
- O_CREAT:若文件不存在则创建之。使用此选项必须提供第3个参数mode,表示该文件的访问权限
- O_EXCL:若同时指定了O_CREAT,并且文件已经存在,则出错,返回
- O_TURNC:若文件已经存在,将其长度截断了0字节
- O_NONBLOCK:对于设备文件,以O_NONBLOCK方式打开可以做非阻塞IO
- mode参数:它也是位掩码参数。mode指定了文件访问权限,SUSv3规定,其数据类型为
mode_t
,
- mode参数可以指定为数字,通常为8进制,更为可取的做法是对0个或多个位掩码常量进行逻辑或操作
- 若open未指定O_CREAT参数,则省略mode参数。
- 能影响新建文件权限的2个因素
- mode参数影响
- 进程的umask值
- 可能存在的父父目录的默认访问控制列表的影响
close
int close(int fd);
open使用举例
只读方式打开一个文件
fd = open("a.txt", O_RDONLY);
有则打开,无则创建
fd = open("a.txt", O_RDWR | O_CREAT, 0666);
判断个文件是否存在
fd = open("b.txt", O_RDONLY | O_CREAT | O_EXCL, 0666);
截断文件
fd = open("b.txt", O_RDONLY | O_TRUNC, 0666);
fd = open("a.txt", O_RDWR |O_CREAT | O_TRUNC, 0777);
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理