C语言:文件操作(1)

news2024/9/23 15:33:48

1、什么是文件?

磁盘上的文件是文件。

但是在程序设计中,我们一般谈的文件有两种: 程序文件、数据文件

程序文件:
包括源程序文件(后缀为.c),目标文件(windows环境后缀为.obj),可执行程序(wndows环境后缀为.exe)

数据文件:
文件的内容不一定是程序,而是程序运行时读写的数据,比如程序运行需要从中读取教据的文件,或者输出内容的文件。

本章讨论的是数据文件。

在以前各章所处理教据的输入输出都是以终端为对象的,即从终端的键盘输入数据,运行结果显示到显示器上。其实有时候我们会把信息输出到磁盘上,当需要的时候再从磁盘上把数据读取到内存中使用,这里处理的就是磁盘上文件。

文件名:

一个文件要有一个唯一的文件标识,以便用户识别和引用。
文件名包含3部分:文件路径+文件名主干+文件后缀
例如: c:\code\test.txt
为了方便起见,文件标识常被称为文件名

文件类型:

根据数据的组织形式,数据文件被称为文本文件或者二进制文件
数据在内存中以二进制的形式存储,如果不加转换的输出到外存,就是二进制文件

如果要求在外存上以ASCII码的形式存储,则需要在存储前转换。以ASCII字符的形式存储的文件就是文本文件

一个数据在内存中是怎么存储的呢?

字符一律以ASCII形式存储,数值型数据既可以用ASCII形式存储,也可以使用二进制形式存储

#include <stdio.h>
int main()
{
   int a = 10000;
   FILE* pf= fopen("test.txt”,"wb");//w=write,b=二进制
   fwrite(&a,41,pf);//二进制的形式写到文件中
   //&a表示在A的地址开始写,4表示4个字节,1表示写1个4字节的数据,pf是文件名
   fclose(pf);
   pf = NULL;
   return 0:
}

文件缓冲区

ANSIC标准采用“缓冲文件系统”处理的数据文件的,所谓缓冲文件系统是指系统自动地在内存中为程序中每一个正在使用的文件开辟一块“文件缓冲区”。从内存向磁盘输出数据会先送到内存中的缓冲区,装满缓冲区后才一起送到磁盘上。如果从磁盘向计算机读入数据,则从磁盘文件中读取数据输入到内存缓冲区(充满缓冲区),然后再从缓冲区逐个地将数据送到程序数据区(程序变量等)。缓冲区的大小根据C编译系统决定的。
在这里插入图片描述

为什么平时我们输出的时候直接可以看到输出效果,是以为我们的程序执行到最后的return 0;的时候,会把缓冲区里面的字符给printf出来。可以再printf后面加一个sleep函数,就可以看到效果。

文件指针

缓冲文件系统中,关键的概念是“文件类型指针,”简称“文件指针”。每个被使用的文件都在内存中开辟了一个相应的文件信息区,用来存放文件的相关信息(如文件的名字,文件状态及文件当前的位置等)。这些信息是保存在一个结构体变量中的。该结构体类型是有系统声明的,取名FILE。
例如VS2008编译环境提供的stdio.h头文件中有以下的文件类型申明:

struct _iobuf 
{
     char *_ptr;
     int _cnt;
     char*base
     int _flag
     int _file
     int _charbuf:
     int _bufsiz;
     char*_tmpfname;
}typedef struct _jobuf FILE;

不同的C编译器的FILE类型包含的内容不完全相同,但是大同小异。
每当打开一个文件的时候,系统会根据文件的情况自动创建一个FILE结构的变量,并填充其中的信息,使用者不必关心细节。
一般都是通过一个FILE的指针来维护这个FILE结构的变量,这样使用起来更加方便
下面我们可以创建一个FILE*的指针变量:

FILE* pf;//文件指针变量

定义pf是一个指向FILE类型数据的指针变量。可以使pf指向某个文件的文件信息区(是一个结构体变量)。通过该文件信息区中的信息就能够访问该文件,也就是说,通过文件指针变量能够找到与它关联的文件。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/59503.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

初级测试到中级测试就差这几个找bug小技巧

前言 测试的过程就是一个寻找影响产品功能和用户体验bug的过程&#xff0c;测试人员发现的bug类型五花八门。 当你在上班期间&#xff0c;听到不远处传来这样的声音“你会不会提BUG&#xff0c;责任人都指派错了&#xff0c;还能好好提吗&#xff1f;” 如果哪天开发对着你说…

Babel自动生成Attribute文档实现详解

这篇文章主要为大家介绍了Babel自动生成Attribute文档实现示例详解&#xff0c;有需要的朋友可以借鉴参考下&#xff0c;希望能够有所帮助&#xff01; 1. 前言 利用Babel自动解析源码属性上的注释生成对应Markdown文档&#xff0c;这个场景的应用主要包括在组件库文档对组件…

SpringBoot单元测试

文章目录1、什么是单元测试2、单元测试有哪些好处&#xff1f;3、SpringBoot 单元测试使用3.1 生成单元测试的类3.2 配置单元测试的类并添加SpringBootTest注解3.3 添加单元测试的业务代码3.4 进行测试并查看结果3.5 使用断言3.6 在不修改数据库的前提下&#xff0c;执行单元测…

室内温度控制仿真模型(Simulink+PLC)

本篇博客将会和大家一起一步步解读Simulink自带的仿真模型(Thermal Model of a House),之后再讨论PLC控制系统控制环境温度的一些经验方法。温度控制的大部分控制方法都是采用PID控制,有关PLC的PID控制相关内容可以参看专栏的其它文章,链接如下: 博途PLC 1200/1500PID P…

【LeetCode每日一题:1774. 最接近目标价格的甜点成本~~~递归+深度优先遍历】

题目描述 你打算做甜点&#xff0c;现在需要购买配料。目前共有 n 种冰激凌基料和 m 种配料可供选购。而制作甜点需要遵循以下几条规则&#xff1a; 必须选择 一种 冰激凌基料。 可以添加 一种或多种 配料&#xff0c;也可以不添加任何配料。 每种类型的配料 最多两份 。 给你…

java计算机毕业设计ssm人事考勤管理系统1u133(附源码、数据库)

java计算机毕业设计ssm人事考勤管理系统1u133&#xff08;附源码、数据库&#xff09; 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff0…

Spread 16.X FOR WPF 中文版 我就喜欢 Spread.NET

Spread 16.X FOR WPF 中文版您可以将 Microsoft Excel 的强大功能嵌入到 WPF 和 Silverlight 应用中&#xff0c;使用丰富的内嵌数据可视化功能展现核心数据和分析结果&#xff0c;按需自定制富有创意的表格模版以及发挥更多便捷高效的功能。Spread WPF-Silverlight 源自备受好…

RIoTBoard开发板系列笔记(十三)—— yocto SDK安装与使用

yocto是一个很强大的嵌入式image 构建工具&#xff0c;借助yocto可以轻松的构建出一个开发板镜像。如果我们想借助yocto开发一些应用层的程序&#xff0c;有以下两种方法可供选择&#xff1a; &#xff08;1&#xff09;按照yocto的构建规则添加自己的程序和编译脚步&#xff0…

通话蓝牙耳机什么牌子好?通话工作蓝牙耳机推荐

在一般人的印象中&#xff0c;蓝牙耳机主要是用于听听歌、打打游戏还有煲剧&#xff0c;&#xff0c;而对经常经常外出的商务差旅人士和音乐发烧友来说&#xff0c;蓝牙耳机的通话和续航也是重点关注的&#xff0c;因此&#xff0c;笔者专门整理了一些通话效果好的蓝牙耳机&…

微服务框架 SpringCloud微服务架构 9 初识 Docker 9.3 Docker 架构

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式&#xff0c;系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 SpringCloud微服务架构 文章目录微服务框架SpringCloud微服务架构9 初识 Docker9.3 Docker 架构9.3.1 镜像和容器9.3.2 Docker 和DockerHub9…

【C/C++】C语言runtime调用技术

概述 C语言编译后&#xff0c;在可执行文件中会有 函数名信息。如果想要动态调用一个C函数&#xff0c;首先需要 根据函数名找到这个函数地址 &#xff0c;然后根据函数地址进行调用。 动态链接器已经提供一个 API&#xff1a;dlsym()&#xff0c;可以通过函数名字拿到函数地…

k8s中service资源与pod详解

文章目录一、Service1、创建集群内部可访问的Service2、创建集群外部也可访问的Service3、配置方式编写二、pod详解1、pod配置文件的资源列表2、pod配置3、启动命令4、port端口配置三、资源配额一、Service 通过上节课的学习&#xff0c;已经能够利用Deployment来创建一组Pod来…

vue.js生命周期函数

Vue生命周期 beforecreate : 举个例子&#xff1a;可以在这加个loading事件created &#xff1a;在这结束loading&#xff0c;还做一些初始化&#xff0c;实现函数自执行mounted &#xff1a; 在这发起后端请求&#xff0c;拿回数据&#xff0c;配合路由钩子做一些事情beforeD…

QT系列第1节 QT中窗口使用简介

QT中窗口按照使用场景分类&#xff0c;可以分成两大类&#xff0c;一类是独立显示的窗口&#xff0c;主要是 QWidget &#xff0c;QDialog &#xff0c;QMainWindow&#xff0c;一类是嵌套在别的窗口的子窗口&#xff0c;包含各种控件以及子窗口&#xff0c;窗口类图如下&#…

CV攻城狮入门VIT(vision transformer)之旅——VIT代码实战篇

&#x1f34a;作者简介&#xff1a;秃头小苏&#xff0c;致力于用最通俗的语言描述问题 &#x1f34a;专栏推荐&#xff1a;深度学习网络原理与实战 &#x1f34a;近期目标&#xff1a;写好专栏的每一篇文章 &#x1f34a;支持小苏&#xff1a;点赞&#x1f44d;&#x1f3fc;、…

超越所有Anchor-free方法!PP-YOLOE-R:一种高效的目标检测网络

点击下方卡片&#xff0c;关注“自动驾驶之心”公众号ADAS巨卷干货&#xff0c;即可获取点击进入→自动驾驶之心【目标检测】技术交流群后台回复【PPYOLO】获取论文、代码等更多资料&#xff01;超越所有Anchor-free方法&#xff01;PP-YOLOE-R&#xff1a;一种高效的目标检测网…

基于粒子群优化算法的微型燃气轮机冷热电联供系统优化调度(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️❤️&#x1f4a5;&#x1f4a5;&#x1f4a5; &#x1f389;作者研究&#xff1a;&#x1f3c5;&#x1f3c5;&#x1f3c5;主要研究方向是电力系统和智能算法、机器学…

APISIX安装与灰度、蓝绿发布

文章目录1、安装1.1、基于docker安装1.2、基于RPM安装2、灰度发布与蓝绿发布测试2.1、compose安装nginx2.1.1、创建目录2.1.2、编辑nginx.conf配置文件2.1.3、编辑docker-compose.yml文件2.1.4、启动nginx2.2、部署apisix和apisix-dashboard2.3、traffic-split插件实现灰度和蓝…

【能效管理】安科瑞远程预付费系统在江西某沃尔玛收费管理的应用

摘要&#xff1a;文章根据用电远程管控原理&#xff0c;设计了用电预付费远程管理终端及管理系统&#xff0c;该系统以智能远程预付费电表、智能网关以及预付费管理软件实现了商业综合体的用电管理&#xff0c;实现了欠费自动分闸&#xff0c;充值后自动合闸&#xff0c;并辅助…

我用diffusion把姐妹cos成了灭霸的模样

卷友们好&#xff0c;我是rumor。关注早的朋友们应该知道&#xff0c;我有个姐妹&#xff0c;她去年回深圳老家了&#xff0c;本来我觉得还ok&#xff0c;还能再约着一起旅游。谁知道一年多了&#xff0c;我还没出过北京&#xff08;微笑。以前有个快乐源泉&#xff0c;就是照她…