一起talk C栗子吧(第一百四十四回:C语言实例--文件操作大结局)



各位看官们,大家好,上一回中咱们说的是基于文件指针进行文件操作的例子,这一回咱们说的是文件操作大结局。闲话休提,言归正转。让我们一起talk C栗子吧!

看官们,我们在前面章回中介绍了文件操作的两种途径:文件描述符和文件指针。今天我们将对这两种文件操作途径进行总结和对比。

我们先看看它们的共同点:

  • 1.口味相同:都喜欢吃文件(都能用来操作文件);
  • 2.生活方式相同:日出而作,日落而息(使用它们时都是按照文件操作三步曲进行:打开,操作,关闭);
  • 3.都不省心:使用时容易引起错误,需要检查使用后的结果,以免发生错误;

接下来我们看看它们的不同点:

  • 1.爹妈不同:文件描述符是Linux系统“生”的,而文件指针是C标准库“生”的;
  • 2.身高不同:文件描述符个子矮小,走路的步子小,走相同的路总比其它人走的步数多。文件指针个子高, 步子也大,走相同的路时走的步数少。你不信?让我告诉你原因:使用文件描述符操作文件时,以字节为单位进行操作,因此读取/写入相同数据时,读取/写入的次数比较多。使用文件指针时,操作的单位可以自己定义,如果操作单位比字节大,那么读取/写入相同数据时,读取/写入的次数比较少。
  • 3.性格不同:文件描述符是个慢性子,操作文件的效率低,而文件指针是个急性子,做事风风火火,操作 文件的效率高。它们有这样的性格,与他们爹妈有很大的关系。我们都知道,计算机的内存和硬盘都可以存放文件,不过从内存中读取文件要比从硬盘中读取文件快,这是因为内存的读取速度远快于硬盘。文件描述符它爹妈也就是Linux系统,让文件描述符直接对磁盘中的文件进行操作(其实也有很小的缓冲,不过可以忽略不计),而文件指针它爹妈(C标准库)让文件指针先在内存中的缓冲区操作文件,当缓冲区満了时才把缓冲区中的数据转移到硬盘上的文件中,这样减少了文件指针读取硬盘的次数,进而提高了文件操作的效率。

看官们,关于文件操作的两种途径:文件描述符和文件指针,我们就说这么多。在实际工作中,大家可以结合他们的相同点以及不同点选择其中一种来操作文件。不过,依据经验来看,使用标准库提供的文件指针来操作文件会好一些,这样不但可以提高文件操作的效率,而且可以提高程序的移植性。当然了,如果想对文件进行专有的操作和控制,那么使用文件描述符操作文件是最理想的选择。

各位看官,关于文件操作大结局的例子咱们就说到这里。欲知后面还有什么例子,且听下回分解 。


时间: 2024-10-25 11:09:00

一起talk C栗子吧(第一百四十四回:C语言实例--文件操作大结局)的相关文章

一起talk C栗子吧( 第一百四十回:C语言实例--文件操作:基于文件描述符三)

各位看官们,大家好,上一回中咱们说的是基于文件描述符进行文件操作的例子,这一回咱们继续说该例子.闲话休提,言归正转.让我们一起talk C栗子吧! 看官们,我们在上一回中详细地介绍了文件操作相关的系统调用.不过,没有举具体的例子.我们的主要内容就是举例子,因此,今天我们将通过具体的例子来说明如果使用系统调用来操作文件. 对文件的操作,还是使用我总结的文件操作三步曲比较好: fd = open(file_name,flags_read); //打开文件 fd = open(file_name,fl

一起talk C栗子吧(第一百四十五回:C语言实例--socket概述)

各位看官们,大家好,上一回中咱们说的是基于文件指针进行文件操作的例子,这一回咱们说的例子是socket概述.闲话休提,言归正转.让我们一起talk C栗子吧! 看官们,我们今天主要介绍socket."前面章回中还在介绍文件操作,怎么突然来说这个叫socket的东西呢?"这里有看官在问了,看官莫急,我们之所为介绍socket,是因为它有点类似文件操作中的文件描述符.说类似有点不太准确,其实socket本质上就是文件描述符.我们可以使用read,write等系统调用来操作socket.当然

一起talk C栗子吧(第一百四十三回:C语言实例--文件操作:基于文件指针三)

各位看官们,大家好,上一回中咱们说的是基于文件指针进行文件操作的例子,这一回咱们继续说该例子.闲话休提,言归正转.让我们一起talk C栗子吧! 看官们,我们在上一回中详细地介绍了标准库中与文件操作相关的函数.不过,限于时间的原因,没有举具体的例子.还是那句老话,只说不练,不是我们的风格.因此,今天我们将通过具体的例子来说明如何使用文件指针来操作文件. 对文件的操作,还是使用我总结的文件操作三步曲比较好: p_file = fopen(file_name,"w"); //打开文件 re

一起talk C栗子吧(第十四回:C语言实例--循环链表)

各位看官们,大家好,从今天开始,我们讲大型章回体科技小说 :C栗子,也就是C语言实例.闲话休提, 言归正转.让我们一起talk C栗子吧! 看官们,上一回中咱们说的是单链表链式存储列的例子,这一回咱们说的例子是:循环链表. 看官们,循环链表也是链表的一种,只不过该链表的头部和尾部相连接,所以构成了一个循环链,因此叫 作循环链表.让我们一起对比一下单链接与循环链表的不同之处:单链表的尾结点哪里也没有指,因为它 的next指针值为空.循环链表的尾结点指向了它的头结点. 看官们,正文中就不写代码了,详

一起talk C栗子吧(第十二回:C语言实例--单链表一)

各位看官们,大家好,从今天开始,我们讲大型章回体科技小说 :C栗子,也就是C语言实例.闲话休提, 言归正转.让我们一起talk C栗子吧! 看官们,上一回中咱们没有说具体的例子,而且是说了例子中的文件组织结构.这一回咱们继续说C例子, 说的例子是链表,更准确的说法叫作单链表.咱们不但要说C例子,而且会在例子中使用上一回中说过的 文件组织结构,就当作是举例说明文件组织结构的使用方法. 有点一石二鸟的感觉,哈哈. 链表定义 看官们,所谓的链表其实就是一组元素通过一定的方式链接在一起.比如我们坐的火车

一起talk C栗子吧(第一百四十九回:C语言实例--socket通信三)

各位看官们,大家好,上一回中咱们说的是socket通信的例子,这一回咱们继续说该例子.闲话休提,言归正转.让我们一起talk C栗子吧! 看官们,我们在上一回中介绍了socket通信的步骤,当时提到了实现这些步骤使用的系统调用,当时有些看官不理解这些系统调用,今天我们趁热打铁来介绍这些系统调用. int socket(int domain, int type, int protocol) 该函数用来创建一个socket; 该函数的三个参数分别对应socket的三个属性:域,类型和协议: 该函数运

一起talk C栗子吧(第一百四十八回:C语言实例--socket通信二)

各位看官们,大家好,上一回中咱们说的是socket通信的例子,这一回咱们继续说该例子.闲话休提,言归正转.让我们一起talk C栗子吧! 看官们,我们在上一回中介绍了套接字的通信步骤,限于时间的原因, 我们只介绍了流套接字的通信步骤.这一回中我们将介绍数据报套接字的通信步骤. 下面是客户端和服务器端实现通信的详细步骤: 客户端实现通信的步骤: 1.创建客户端套接字(socket): 2.设置客户端套接字的属性:域,类型和协议: 3.通过操作客户端套接字来实现客户端与服务器的通信(sendto,r

一起talk C栗子吧(第一百四十六回:C语言实例--socket属性)

各位看官们,大家好,上一回中咱们说的是socket概述的例子,这一回咱们说的例子是socket属性.闲话休提,言归正转.让我们一起talk C栗子吧! 看官们,我们在上一 回中对socket做了基本的介绍,这一回我们主要是介绍socket的属性. socket主要有三个属性: 域(domain) 类型(type) 协议(protocol) 域表示socket的通信范围.比如,我们通过互联网通信时使用的域为AF_INET(表示IPv4,与现在使用的IPv6对应的域是AF_INET6),我们在本地通

一起talk C栗子吧(第一百一十二回:C语言实例--线程同步概述)

各位看官们,大家好.上一回中咱们说的是线程间通信的样例,这一回咱们说的样例是:线程同步.闲话休提,言归正转.让我们一起talk C栗子吧! 看官们,提到同步.我想大家都不陌生,由于我们在前面章回中介绍过进程同步的内容. 大家都知道线程是轻量级的进程,尽管线程不像进程一样须要专门的通信机制,可是线程须要专门的同步机制. 今天我们来介绍一下线程同步的内容. 同步的含义对于进程和线程是同样的.仅仅是进程和线程实现同步的方式不同样.关于同步的含义,我们就不做具体的介绍了,假设大家忘记了,能够点击这里查看