fopen函数的type字段

本文详细介绍了C语言中文件操作的基础知识,包括fopen、freopen及fdopen函数的使用方法,以及如何通过不同的参数设置实现对文件的读取、写入、追加等操作。文章还特别解释了不同类型文件(如二进制文件和文本文件)的处理方式,并给出了具体的type参数值。


标准库中打开文件函数的原型:

#include <stdio.h>
FILE *fopen(const char *restrict pathname, const char *restrict type);
FIEL *freopen(const char *restrict pathname, const char *restrict type, FILE *restrict fp);
FILE *fdopen(int filedes, const char *type);
//三个函数返回值:若成功返回文件指针,出错返回NULL

fopen函数打开pathname指定的文件,打开类型为type
type参数指定对该IO流的读写方式,但这里却是很容易搞混淆的地方。
首先说几种常用的情形:
1.文件是存在硬盘上的公共资源,一个用户创建的每个进程都可以打开该文件,都可以读写该文件,这容易造成文件访问的冲突
2.文件的操作就两种,读或者写,大多数场景只使用其中的一种,例如:cat命令是只读文件,管道就是一个读一个写,同时读写的情况比较少
3.文件是否存在是一个问题?当只读而打开一个文件时,若文件不存在,就更别谈读取了,这个肯定是个错误;当只写而打开一个文件,若文件不存在,就可以创建一个文件,然后再往文件内写,但读却不能够创建一个文件,再从文件内读,就算读也只是读到文件尾。例如 echo “hello” > hello.txt 这样的一个命令,文件不存在是常有的事,此时就会创建文件
4.文件写的时候也会出问题?若文件存在,只写而打开,必定会覆盖写如的位置的文件内容,同时还会有多个进程同时写的冲突。
5.文件还分为二进制文件和文本文件
由上述原因,就衍生出了文件的操作方法:

type
rrb为读而打开;此打开的权限只能读,单个读和单个写的文件应用的比较多,但若文件不存在就会打开失败
wwb为写而打开;此打开的权限只能写,若文件不存在则创建,新创建的文件长度本就是0,若文件存在就将其截短为0,是在文件头写
aab为追加而打开;只能在文件尾写,同写权限一样,文件不存在则创建,存在却不截短为0,定位到文件尾写
r+r+b+是为读写而打开,默认的附加操作为r的操作,文件不存在则打开失败
w+w+b+是为读写而打开,默认的附加操作为w的操作,文件不存在则创建,存在则截短为0
a+a+b+是为读写而打开,默认的附加操作为a的操作,文件不存在则创建,存在则定位到文件尾

注:b表示是二进制文件
所以基本的操作方式是rwa,读写追加,但type类型是字符串指,只能取这里列出来的几种,却没有这样的调用fopen("test","rw"),想为读写而打开,但却不能用rw作为类型值,C编译器是不判断字符串的值,这里不会报错,但rw却是得不到我们想要的为读写而打开的文件,读写打开只能用+,然后附加基本的文件判断操作。
type = "r" | "w" | "a" | "rb" | "wb" | "ab" | "r+" | "w+" | "a+" | "r+b" | "w+b" | "a+b" | "rb+" | "wb+" | "ab+"
type只能取这15个值,其他的值得不到期望的文件操作权限
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值