首页 > 其他分享 >【C语言】文件操作(下)

【C语言】文件操作(下)

时间:2024-08-03 12:28:11浏览次数:8  
标签:文件 函数 读写 C语言 内存 缓冲区 操作 输入

文章目录

前言

在之前文件操作(上)文件操作(中)的文章中,我从为什么要使用文件再到文件的打开和关闭操作给大家解读了文件在内存中运行的底层原理,但是我并未介绍文件的一下详细的读写操作。那么,在本文我就给大家介绍文件的一系列读写操作

1. 文件的读和写

读文件就是从文件中读取数据到内存中,写文件就是把内存中的一些数据写入到文件中。

可能有的读者会问,这么简单的道理为什么还要拿出来单独的讲?因为在我自己学习文件初期时,常常会被读写这两个字眼弄得晕头转向。倒不是说有多难理解,关键在于弄清谁是读写的主体。

什么意思呢?就是文件可用作为读写的对象,那内存不也大致认为可以进行读写。
再详细一点就是,内存也可以作为读写的对象,然而内存的读写与文件的读写两种不同的说法,背后的逻辑确是完全相同的。

比如,我要从文件中读取信息,那就是对文件进行读操作。我要从文件中写入数据,那就是对文件中进行写操作。
再如,我要从文件中输出数据到内存,那就是对文件进行读操作。我要从内存中输入数据到文件,那就是对文件进行写操作。

但是如果我换种说法,结局可能就不一样了。
比如,我要把内存中的数据输出到文件中,而这时对于文件来说,就不是读操作,而是写操作了。所以我们不能只简单看“输入”和“输出”这两个字眼就断定是读操作还是写操作。我们还要看谁是主体。

有一副图可以这么表示(只是以文件为对象):
图解
这里我想告诉大家的就是,一定认清谁是读写的主体,因为这关系到我们之后所使用函数对应的文件打开模式。

2. 文件的顺序读写

2.1 顺序读写函数的介绍

提示:以文件为对象(功能),以内存为对象(适用于)

函数名功能适用于
fgetc字符输入函数(读)所有输入流
fputc字符输出函数(写)所有输出流
fgets文本行输入函数(读)所有输入流
fputs文本行输出函数(写)所有输出流
fscanf格式化输入函数(读)所有输入流
fprintf格式化输出函数(写)所有输出流
fread二进制输入(读)文件输入流
fwrite二进制输出(写)文件输出流

上面说的适用于所有输入流一般指适用于标准输入流其他输入流(如文件输入流);上面说的适用于所有输出流一般是指适用于标准输入流其他输入流(如文件输入流)。

那接下来我将一对一对的为大家讲解上面的函数,内容可能有点多,希望耐心阅读。

2.1.1 fgetc 和 fputc

fgetc函数的原型:
fgetc函数原型

fgetc函数的参数和返回值
需要关注的是fgetc函数的返回值,每当读到文件末尾时,函数就会返回一个EOF(end of file)。这个EOF在C编译器中被定义为-1。

fputc函数的原型:
fputc函数原型
fputc形参和返回值

  • fgetc的功能:将文件中的字符输出到程序中。
  • fputc的功能:将程序中的字符输入到文件中。

案例演示:
fgetc:
fgetc案例演示
fputc:
fputc函数的案例演示

2.1.2 fgets 和 fputs

fget函数的原型:
fgets函数原型
fgets的形参和返回值
fgets:
fgets的案例演示
fgets函数功能:将文件中的文本行数据输入到程序中。

在使用fgets函数时的一些小细节:

  • 当fgets函数读取失败时,会返回一个空指针
  • 针对fgets形参中的int num,这个形参的意思是允许拷贝的最大字节数,其中‘\0’本来就占用这个形参的位置。举个例子,比如我有一个字符串“abc”,现在我让num=3,其在文件中读取的只有2个字节的内容,因为‘\0’本身就占一个字节。(重点)

fputs函数的原型:
fputs函数原型

fputs函数形参和返回值

fputs:
fputs函数案例演示

fputs函数的功能:向文件输入文本行内容。
如果该函数执行成功,那么它将会返回一个非负数的值。

限于篇幅的原因,本次的读写函数就介绍到这里。剩余的读写函数和随机读写函数,我会在之后的文章中于大家分享,敬请期待!!!

标签:文件,函数,读写,C语言,内存,缓冲区,操作,输入
From: https://blog.csdn.net/tianxiawushanu/article/details/140793514

相关文章

  • 3、Qt- 将ui文件转为py文件后运行py程序
    .ui转.py文件先将生成的.ui文件转为.py文件编辑.py文件#Formimplementationgeneratedfromreadinguifile'untitled.ui'##Createdby:PyQt6UIcodegenerator6.4.2##WARNING:Anymanualchangesmadetothisfilewillbelostwhenpyuic6is#runagain......
  • python3解析wav文件获取dtmf值
    操作系统:Windows10_x64Python版本:3.9.2从事FreeSwitch相关工作,大概率会遇得到DTMF,DTMF的传递方式有三种:In-bandRFC2833SIP-INFO使用RFC2833或SIP-INFO传递方式的DTMF,FreeSwitch可以在日志中打印出来,但遇到inband模式的DTMF,FreeSwitch的日志就打印不出来了。如果是会议......
  • 2、Qt- 简单窗口的创建与运行ui文件
    认识QWidget和QLabel初识pyqt6语法fromPyQt6.QtWidgetsimportQApplication,QWidget,QLabelimportsys#创建应用对象app=QApplication(sys.argv)#sys.argv是一个列表,其中包含命令行参数。第一个参数是脚本名称,其余参数是命令行参数。类似shell脚本中的$1,$2,......
  • OpenCV||超细节的基本操作
    一、图像读取retval=cv2.imread(filename[,flags])filename:需要读取的图片路径名,支持多种图片格式,如JPEG、PNG、TIFF等。flags:一个可选参数,指定加载图像的颜色类型。常用的值包括:cv2.IMGEAD_ANYDEPTH:其值是2。若载入的图像深度为16位或32位,就返回对应深度的图像,否则转......
  • mac 显示隐藏文件夹
    隐藏的文件和文件夹我们的电脑上,默认情况下会有很多隐藏文件和文件夹。这些文件和文件夹大部分都是一些支撑Mac运行的重要文件,主要是为了防止用户在使用过程中意外将其删除或者修改他们。如何显示Mac上隐藏的文件和文件夹方法一:使用Finder查看Mac所有隐藏的文件和文件夹打开访......
  • ROS Upstart 中启动 launch 文件
    在ROSUpstart中启动launch文件时,控制台输出确实可能会对服务的启动和运行产生影响。为了避免这一问题,您可以在Upstart配置文件中添加 console 指令来控制输出的行为。主要有以下几种选择:1.将控制台输出重定向到日志文件:#/etc/ros/upstart/my_robot.conf......
  • E25.【C语言】练习:修改二进制序列的指定位
    十进制13-->二进制01101现要求二进制序列的第5位修改为1,再改成0复习:逻辑运算非(NOT)(C语言:~)x==0,NOTx-->1;x==1,NOTx-->0与(AND)(C语言:&)x=0或1,xAND0-->0,0ANDx-->0或(OR)(C语言:|)x=0或1,xOR1-->1,1ORx-->1异或(XOR)(C语言:^)x==0或1,xXOR1-->NOTx和1XORx-->......
  • shell获取敏感词接口json数据更新时重启nginx+lua环境、一个逐步删除服务器上文件夹的
    一、shell获取敏感词接口json数据如有更新重启nginx+lua环境    因为工作需要,需要写一个shell脚本获取对应接口的数据(其它管理后台控制的敏感词库)。因为当前平台是nginx+lua脚本,重装加载敏感词需要重启nginx.实现起来也很简单,第一点,需要对获取的json数据进行分析,shell......
  • Hadoop:java使用HDFS API实现基本操作工具类
    1、引入库<dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-common</artifactId><version>3.1.0</version></dependency><dependency><groupId>org.apache.hadoop</......
  • 【Linux进程理解】| 冯诺依曼体系结构 | 操作系统 | 进程理解 | 状态 | 优先级
    本文目录【写在前面】一、冯•诺依曼体系结构......