fopen函数的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.文件还分为二进制文件和文本文件
由上述原因,就衍生出了文件的操作方法:
r | rb | 为读而打开;此打开的权限只能读,单个读和单个写的文件应用的比较多,但若文件不存在就会打开失败 |
w | wb | 为写而打开;此打开的权限只能写,若文件不存在则创建,新创建的文件长度本就是0,若文件存在就将其截短为0,是在文件头写 |
a | ab | 为追加而打开;只能在文件尾写,同写权限一样,文件不存在则创建,存在却不截短为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个值,其他的值得不到期望的文件操作权限
fopen函数的type字段相关推荐
- fopen()函数详解
1.2 文件的输入输出函数 键盘.显示器.打印机.磁盘驱动器等逻辑设备, 其输入输出都可以通过文件管理的方法来完成.而在编程时使用最多的要算是磁盘文件, 因此本节主要以磁盘文件为主, 详细介 ...
- fopen函数的用法示例_在C和C ++中使用fopen()函数的用法以及示例
fopen函数的用法示例 In C and C++ programming languages fopen() function is used to open files and make oper ...
- fopen函数的用法示例_使用示例的C语言中的fopen()函数
fopen函数的用法示例 C语言中的fopen()函数 (fopen() function in C) Prototype: 原型: FILE *fopen(const char* filename, ...
- C语言输入输出重定向与fopen函数使用详解
大多数情况下,我们所熟知的输入输出都是标准I/O(标准输入输出),也就是我们在写代码时会直接从键盘读取,从屏幕输出.但是当我们涉及到数据统计或者多组未定义内容输入时,我们的程序就会出现一些小问题 in ...
- R语言dplyr处理dataframe:使用mutate函数生成新的列、recode函数进行数据编码、rename函数重命名字段、arrange排序数据列、select筛选数据、filter过滤数据
R语言使用dplyr包处理dataframe数据:使用mutate函数生成新的数据列.recode函数进行数据编码.rename函数重命名字段.arrange函数对数据列内容排序.select筛选数据 ...
- R语言dataframe获取每个字段(特征)的数据类型实战:使用sapply函数获取每个字段(特征)的数据类型、通过柱状图可视化特征的种类以及个数
R语言dataframe获取每个字段(特征)的数据类型实战:使用sapply函数获取每个字段(特征)的数据类型.通过柱状图可视化特征的种类以及个数 目录
- SAP WM中阶存储类型里的Full stk rmvl 字段和Return Storage type字段
SAP WM中阶存储类型里的Full stk rmvl 字段和Return Storage type字段 SAP WM存储类型的配置里,可以配置从某个存储区域里下架的时候都是全数下架,不管需要下架的数 ...
- SAP MM 物料主数据里的‘Packaging Material Type‘字段
SAP MM 物料主数据里的'Packaging Material Type'字段 1, 这个packaging material type不是我们通常物料主数据里的material type, 而是 ...
- SAP MM PR单据类型的配置里‘Control’和’Doc.Type’字段的作用?
SAP MM PR单据类型的配置里'Control'和'Doc.Type'字段的作用? Control:如果选成了T,是使用于STO(公司间转储或者公司内转储),需要将Plant当作VENDOR. C ...
最新文章
- 基于轮廓调整的SOTA实例分割方法,速度达32.3fps | CVPR 2020
- pytorch中的torch.tensor.repeat以及torch.tensor.expand用法
- Facebook高管:我们是科技公司 不是媒体公司
- 研究者设计了Fastball任务早期诊断阿尔茨海默病
- 桌面虚拟化之远程协助
- Linux学习:shell 命令(软件安装和卸载)
- Kafka相关面试真题整理( 持续更新... ... )
- java中两种遍历集合的方式_Java中Map集合的两种遍历方式
- python 与栈 入门
- 驳文不看文,实在可怕
- 摄影小白入门相机选择(个人出发)
- mysql报No Database Selected
- 苹果手机小圆点怎么设置?悬浮球设置,轻松学会
- Java 导出excel进行换行
- Codevs 1066 引水入城 2010年NOIP全国联赛提高组 BFS + 贪心
- 重启计算机请等待当前程序完成卸载,Win7卸载软件提示“请等待当前程序完成卸载或更改”要怎么办呢?...
- 如何通过重写hashCode()方法将偏向锁性能提高4倍?
- 信息收集:CCF大学生计算机系统与程序设计竞赛(CCSP)
- 统一网关Gateway-搭建网关服务
- 一张图解读小米公司的商业模式