文件I/O打开使用

📅 2026/7/1 6:43:18
文件I/O打开使用
Linux 文件I/Oopen() 函数详解1. 概述open()函数是 Linux/Unix 系统中用于创建或打开文件的核心系统调用。它返回一个文件描述符file descriptor后续的读写操作都通过这个描述符进行。1.1 函数原型#includefcntl.h/* 打开已存在文件 */intopen(constchar*pathname,intflags);/* 创建新文件或打开文件 */intopen(constchar*pathname,intflags,mode_tmode);1.2 返回值成功返回非负整数文件描述符通常从 3 开始0/1/2 为标准输入/输出/错误失败返回 -1并设置errno表示具体错误1.3 基本用法打开现有文件使用两个参数的版本创建新文件使用三个参数的版本第三个参数指定文件权限文件I/O – open函数原型int open(const char *pathname, int flags, mode_t mode);参数说明pathname被打开的文件名可包括路径名。flags基础读写标志三者互斥O_RDONLY只读方式打开文件O_WRONLY可写方式打开文件O_RDWR读写方式打开文件附加控制标志O_CREAT文件不存在则新建文件使用第三个参数设置权限O_EXCL搭配O_CREAT使用文件已存在时返回错误可用于检测文件是否存在O_NOCTTY若打开的是终端设备该终端不作为进程控制终端O_TRUNC文件已存在时打开后清空原有全部数据O_APPEND追加模式打开所有写操作均在文件末尾执行mode被打开新文件的存取权限使用八进制数字表示。图片文字提取➢ umask用来设定文件或目录的初始权限➢ 文件和目录的真正初始权限➢ 文件或目录的初始权限 文件或目录的最大默认权限 − umask补充知识点最大默认权限区分普通文件最大默认权限0666rw-rw-rw-无执行权限目录文件最大默认权限0777rwxrwxrwx目录必须有执行权限才能进入计算逻辑掩码屏蔽并非直接减法是按位屏蔽默认权限 (~umask)示例若umask为0022新建文件0666 ~0022 0644新建目录0777 ~0022 0755文件I/O – open – 示例1需求以只写方式打开文件1.txt。如果文件不存在则创建如果文件存在则清空intfd;if((fdopen(1.txt,O_WRONLY|O_CREAT|O_TRUNC,0666))0){perror(open);return-1;}……标志位解析O_WRONLY只写模式打开O_CREAT文件不存在时新建文件此时必须传入第三个权限参数0666O_TRUNC文件已存在时清空文件原有全部内容补充说明0666是新建文件的原始权限最终生效权限会受系统umask掩码影响返回值fd为文件描述符小于0代表打开失败perror(open)会打印具体错误信息