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

#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
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字段相关推荐

  1. fopen()函数详解

    1.2  文件的输入输出函数     键盘.显示器.打印机.磁盘驱动器等逻辑设备, 其输入输出都可以通过文件管理的方法来完成.而在编程时使用最多的要算是磁盘文件, 因此本节主要以磁盘文件为主, 详细介 ...

  2. fopen函数的用法示例_在C和C ++中使用fopen()函数的用法以及示例

    fopen函数的用法示例 In C and C++ programming languages fopen() function is used to open files and make oper ...

  3. fopen函数的用法示例_使用示例的C语言中的fopen()函数

    fopen函数的用法示例 C语言中的fopen()函数 (fopen() function in C) Prototype: 原型: FILE *fopen(const char* filename, ...

  4. C语言输入输出重定向与fopen函数使用详解

    大多数情况下,我们所熟知的输入输出都是标准I/O(标准输入输出),也就是我们在写代码时会直接从键盘读取,从屏幕输出.但是当我们涉及到数据统计或者多组未定义内容输入时,我们的程序就会出现一些小问题 in ...

  5. R语言dplyr处理dataframe:使用mutate函数生成新的列、recode函数进行数据编码、rename函数重命名字段、arrange排序数据列、select筛选数据、filter过滤数据

    R语言使用dplyr包处理dataframe数据:使用mutate函数生成新的数据列.recode函数进行数据编码.rename函数重命名字段.arrange函数对数据列内容排序.select筛选数据 ...

  6. R语言dataframe获取每个字段(特征)的数据类型实战:使用sapply函数获取每个字段(特征)的数据类型、通过柱状图可视化特征的种类以及个数

    R语言dataframe获取每个字段(特征)的数据类型实战:使用sapply函数获取每个字段(特征)的数据类型.通过柱状图可视化特征的种类以及个数 目录

  7. SAP WM中阶存储类型里的Full stk rmvl 字段和Return Storage type字段

    SAP WM中阶存储类型里的Full stk rmvl 字段和Return Storage type字段 SAP WM存储类型的配置里,可以配置从某个存储区域里下架的时候都是全数下架,不管需要下架的数 ...

  8. SAP MM 物料主数据里的‘Packaging Material Type‘字段

    SAP MM 物料主数据里的'Packaging Material Type'字段 1, 这个packaging material type不是我们通常物料主数据里的material type, 而是 ...

  9. SAP MM PR单据类型的配置里‘Control’和’Doc.Type’字段的作用?

    SAP MM PR单据类型的配置里'Control'和'Doc.Type'字段的作用? Control:如果选成了T,是使用于STO(公司间转储或者公司内转储),需要将Plant当作VENDOR. C ...

最新文章

  1. 基于轮廓调整的SOTA实例分割方法,速度达32.3fps | CVPR 2020
  2. pytorch中的torch.tensor.repeat以及torch.tensor.expand用法
  3. Facebook高管:我们是科技公司 不是媒体公司
  4. 研究者设计了Fastball任务早期诊断阿尔茨海默病
  5. 桌面虚拟化之远程协助
  6. Linux学习:shell 命令(软件安装和卸载)
  7. Kafka相关面试真题整理( 持续更新... ... )
  8. java中两种遍历集合的方式_Java中Map集合的两种遍历方式
  9. python 与栈 入门
  10. 驳文不看文,实在可怕
  11. 摄影小白入门相机选择(个人出发)
  12. mysql报No Database Selected
  13. 苹果手机小圆点怎么设置?悬浮球设置,轻松学会
  14. Java 导出excel进行换行
  15. Codevs 1066 引水入城 2010年NOIP全国联赛提高组 BFS + 贪心
  16. 重启计算机请等待当前程序完成卸载,Win7卸载软件提示“请等待当前程序完成卸载或更改”要怎么办呢?...
  17. 如何通过重写hashCode()方法将偏向锁性能提高4倍?
  18. 信息收集:CCF大学生计算机系统与程序设计竞赛(CCSP)
  19. 统一网关Gateway-搭建网关服务
  20. 一张图解读小米公司的商业模式

热门文章

  1. mate20por3d人脸识别_华为mate30pro支持3D结构光人脸识别吗
  2. HTML5定稿了,为什么原生App世界将被颠覆
  3. ROS2探索总结-2.走近ROS2.0时代
  4. 【offer来了】成功上岸美团、字节、华为(婉拒)
  5. Nessus: 漏洞扫描器-网络取证工具
  6. 阿里面试真题:Dubbo的SPI机制
  7. 微信公众号中图文素材如何用CSS形式实现圆点等效果
  8. K-Means 聚类算法分析客户群价值
  9. 2022年压力焊操作证考试题库及在线模拟考试
  10. 固定-浮动定位在顶部的div