文章目录

    • 回顾C语言文件操作
      • 打开方式:
      • 写文件
      • 读文件
      • C++风格的文件读写
      • 关于三个流
  • 什么是当前路径

回顾C语言文件操作

C语言的文件操作如下:

文件操作函数 功能
fopen 打开文件
fclose 关闭文件
fputc 写入一个字符
fgetc 读取一个字符
fputs 写入一个字符串
fgets 读取一个字符串
fprintf 格式化写入数据
fscanf 格式化读取数据
fwrite 向二进制文件写入数据
fread 从二进制文件读取数据
fseek 设置文件指针的位置
ftell 计算当前文件指针相对于起始位置的偏移量
rewind 设置文件指针到文件的起始位置
ferror 判断文件操作过程中是否发生错误
feof 判断文件指针是否读取到文件末尾

打开方式:

文件使用方式 含义 如果指定文件不存在
“r”(只读) 为了输入数据,打开一个已经存在的文本文件 出错
“w”(只写) 为了输出数据,打开一个文本文件 建立一个新的文件
“a”(追加) 向文本文件尾添加数据 出错
“rb”(只读) 为了输入数据,打开一个二进制文件 出错
“wb”(只写) 为了输出数据,打开一个二进制文件 建立一个新的文件
“ab”(追加) 向一个二进制文件尾添加数据 出错
“r+”(读写) 为了读和写,打开一个文本文件 出错
“w+”(读写) 为了读和写,建议一个新的文件 建立一个新的文件
“a+”(读写) 打开一个文件,在文件尾进行读写 建立一个新的文件
“rb+”(读写) 为了读和写打开一个二进制文件 出错
“wb+”(读写) 为了读和写,新建一个新的二进制文件 建立一个新的文件
“ab+”(读写) 打开一个二进制文件,在文件尾进行读和写 建立一个新的文件

基本操作:

  • 打开文件,要判断是否打开文件成功 如果打开成功则进行文件操作(读文件/写文件) ,如果打开失败,返回NULL
  • 关闭文件
FILE* fopen(const char* path,const char* mode)   //打开文件  第一个参数:文件路径  第二个方式:打开方式
int fclose(FILE* fp)    //关闭文件

我们可以使用fputs /fgets 以字符串形式读写 也可以使用fprintf/fscanf格式化的形式读写

下面我们以字符串的形式举例子

写文件

int fputs(const char *s, FILE *stream);  //向特定的文件写入字符串
fputs(msg,fp)  把msg的内容写入到fp指向的文件

写文件主要有两种打开方式: wa, 如果要写的文件不存在,会先创建然后再写, 其中:w模式打开,会把原来的内容清除掉再写入,相当于是覆盖原内容


a的模式写:相当于是在原内容的后面追加内容


读文件

char *fgets(char *s, int size, FILE *stream);//从特定的文件流中按行读取内容,内容放在缓冲区s中.读取成功返回字符串的起始地址,否则返回NULL  第二个参数:缓冲区大小
fgets(buffer,sizeof(buffer),fp):把fp指向文件的内容读取到buffer中,读取字节大小为sizeof(buffer)

如果没有该文件,就会报错! 进入feof内部


C++风格的文件读写


关于三个流

C语言默认会打开三个输入输出流:stdin、stdout、stderr,它们的类型都是FILE*文件指针,C语言把它们当做文件看待;站在系统角度,stdin对应的硬件设备是键盘、stdout对应显示器、stderr对应显示器,本质上我们最终都是访问硬件

流名称 对应硬件设备
stdin 键盘
stdout 显示器
stderr 显示器

C++中也有cin、cout、cerr,几乎所有语言都提供标准输入、标准输出、标准错误这三个流


fputs既然是向文件写入,stdout也是FILE*类型,我们可以向显示器标准输出打印了->这也说明显示器被看做文件

stdout和stderr的区别:

  • stdout和stderr对应的硬件设备都是显示器,但是二者输出重定向时结果有所不同

例子:向显示器标准输出stdout写入

结论:所谓的重定向->实际上是输出重定向,把本来应该显示到stdout的内容重定向写入到文件中


fputs可以向一般文件(磁盘,也是硬件)或者硬件设备写入,Linux下一切皆文件,往显示器打印,读取键盘的内容,把内容写入文件(本质是往磁盘写) ----->>>>本质都是访问硬件(显示器,键盘,文件(磁盘))

  • 显示器和键盘等设备都可以看成是文件,我们能看到显示器上的数据,本质是我们向"显示器文件"写入了数据,而我们敲击键盘能被电脑获取,本质是电脑从"键盘文件"读取了数据

问:为什么向显示器写入数据,从键盘读取数据,不需要进行打开显示器文件和键盘文件的相应操作呢?

打开文件一定是进程运行的时候才打开的,进程运行的时候默认打开三个流:标准输入流,标准输出流,标准错误流,对应到C语言分别是:stdin stdout stderr,这三者都是FILE*类型的指针

其中标准输入流对应的是键盘 标准输出流和标准错误流对应的是显示器, 当我们的C语言程序运行起来的时候,OS会默认把这三个流打开,然后我们才能调用对应的接口,例如;scanfprintf向键盘和显示器进行输入输出操作


什么是当前路径

上述所写程序中,当我们用fopen以写入的方式打开文件,如果该文件不存在,系统会默认在当前目录下为我们创建该文件,那我们所说的当前路径是什么呢? 首先我们准备一个程序验证一下:


例如:我们在FileCode目录下运行可执行程序myfile, 那么可执行程序所创建的文件就出现在FileCode目录下


那这样可以说明:当前路径指的是当前可执行程序所处的路径吗? 并不能!!!

此时我们把当前FileCode目录下的log.txt文件删除, 然后我们cd ..回退到上级目录,然后执行可执行程序myfile,会发生什么呢?

此时我们发现,该可执行程序所创建的文件并没有在FileCode目录(可执行程序所处目录)下,而是在我们当前所处的目录下

此时我们可以使用一个检测脚进行观察: 我们的myfile.c文件中写入一个死循环while(1)

当可执行程序运行起来变为进程后,我们可以获取该进程的PID,然后根据该PID在根目录下的proc目录下查看该进程的信息

ps -axj | head -1&&ps axj | grep myfile | grep -v grep
ls /proc/进程的PID -al #查看进程的信息

这里我们可以看到有两个路径, 这是两个软链接文件cwd和exe其中:

  • cwd 进程运行时我们所处的路径
  • exe 可执行程序的所处路径

所以我们的结论是:我们所说的当前路径,不是指可执行程序所处的路径exe,而是指可执行程序运行称为进程时我们所处的路径 ,即cwd

【Linux】基础IO-回顾C语言文件操作相关推荐

  1. linux复制文件快捷键,Linux基础学习(基本命令和文件操作)

    最近系统的学习Linux知识,想在此做个记录. 1.常用的快捷键 1.1 历史命令切换 Ctrl + P                    命令向上翻 Ctrl + N(Next)     命令向 ...

  2. Java基础 -IO入门简介、文件操作、与IO流分类简述

    文章目录 IO流入门概念 文件概念 什么是文件 文件流 文件常用操作 创建文件对象相关构造器和方法 创建文件案例 注意 获取文件相关信息 目录的操作和文件删除 delete mkdir.mkdirs ...

  3. 实验1:用户的登录与退出、IO重定向与简单文件操作

    实验1:用户的登录与退出.IO重定向与简单文件操作 1.实验目的 (1).掌握系统开启和关闭的方法及正常关闭系统的意义和必要性: (2).掌握用户的登录与退出的方法及用户退出系统或注销的意义和必要性: ...

  4. Linux 基础—— IO 全面介绍

    Linux - 基础 IO Linux - 基础 IO 文件 IO 相关操作 stdin & stdout & stderr 系统文件 I/O 文件的宏观理解: 狭义理解: 1.文件在 ...

  5. C语言文件操作函数大全(看到总结的真的很好,就转载贡献给大家了)

    C语言文件操作函数大全 clearerr(清除文件流的错误旗标) 相关函数 feof 表头文件 #include<stdio.h> 定义函数 void clearerr(FILE * st ...

  6. ❤️学懂C语言文件操作读这篇就够了(万字总结,附习题)❤️

    目录 ​​​ 一,写在前面 二,为什么使用文件 1,原因 2,数据流 3,缓冲区(Buffer) 4,C语言中带缓冲区的文件处理 5,文件类型 6,文件存取方式 三,什么是文件 1,程序文件 2,数据 ...

  7. C语言文件操作解析(二)

    C语言文件操作解析(二) C语言中对文件进行操作必须首先打开文件,打开文件主要涉及到fopen函数.fopen函数的原型为 FILE* fopen(const char *path,const cha ...

  8. 基于存储的C语言文件操作常规问题分析(文本文件与二进制文件)

    基于存储的C语言文件操作常规问题分析(文本文件与二进制文件) 问题描述 文本文件与二进制文件 数据写入文本乱码问题 fopen和open 流式文件操作常用函数 直接I/O文件操作常用函数 问题描述 我 ...

  9. C语言文件缓冲区作用,C语言 文件操作4--文件结构体FILE的理解以及缓冲区再讲...

    //文件结构体FILE的理解以及缓冲区再讲 #include #include //要点:文件结构 //struct _iobuf { // char *_ptr; ------当前缓冲区内容指针 / ...

最新文章

  1. python-eggs异常解决方法
  2. Intersection of Two Linked Lists——经典问题
  3. Ueditor富文本添加视频内容,视频不显示以及编辑富文本时,视频不显示解决方案
  4. MySQL 备份和恢复策略(二)
  5. [转]侯捷对进入IT行业的年轻人的建议
  6. easyUI parser的使用
  7. web浏览器进化简史
  8. 三种不同的梯度下降算法和正则方程的线性回归预测结果对比
  9. 兔子能不能跑得过乌龟
  10. mac 外接双显示器
  11. 规模决定利润 网吧规模扩充升级参考方案(转)
  12. TCL L32F2510E 安装第三方软件方法
  13. MT4-EA自动化交易研究笔记(2022-04-23)
  14. 执行SQL语句的时候唯一约束字段异常Duplicate entry '33382-1-0' for key xxx
  15. Androidnbsp;LinearLayout与Relat…
  16. Facebook背后的人工智能
  17. PSS E 3.0(大型电力系统仿真计算软件).rar
  18. 骁龙778gplus和骁龙870差多少 哪个好
  19. 解决处理虚拟主机中有文件触发了安全防护报警规则,可能存在webshell网页木马...
  20. Echarts-百家姓-饼状图

热门文章

  1. 【BAT-表姐御用04ren进阶命令】文件数字顺序命名及改名(含命令解释)
  2. C语言字符串指针(指向字符串的指针)详解
  3. XXTEA加密流程分析
  4. Caffeine本地缓存
  5. 解决啦idea 中 java文件图标左下角出现红色J
  6. 学校计算机室教师寄语,计算机与信息学院师生寄语2019届毕业生
  7. C语言结构体指针(指向结构体的指针)详解
  8. 02 KVM安装虚拟化
  9. 多平台购买门票,退款中的被消费,导致损失两张门票的屎蛋经历(追回钱的过程深刻展示了中国式踢皮球)
  10. 遇到代码不生效或者报错不要慌