大话C语言:文件 c语言处理大文件
liebian365 2024-11-11 14:51 16 浏览 0 评论
1 文件概述
文件是计算机操作系统中用于存储数据的一种重要构造。在物理层面,文件通常存储在硬盘、闪存或其他持久性存储介质上。在逻辑层面,文件是由一系列记录(如字符、字节、数据块等)组成的,这些记录按一定的格式和顺序排列,用于存储程序或数据。
文件具有以下基本特性:
- 文件名:每个文件都有一个唯一的名称,用于标识和引用该文件。文件名通常由字母、数字、下划线和特定字符组成,并遵循操作系统规定的命名规则。
- 文件类型:文件可以根据其内容或用途进行分类,如文本文件、二进制文件、图像文件、音频文件等。不同的文件类型有不同的存储格式和处理方式。
- 文件大小:文件大小是指文件占用的存储空间大小,通常以字节(Byte)为单位表示。文件大小取决于文件内容的多少和存储格式。
- 文件位置:文件在存储介质上的位置由操作系统管理。每个文件都有一个唯一的地址或路径,用于定位该文件在文件系统中的位置。
- 文件属性:文件通常具有一些属性,如创建时间、修改时间、访问权限等。这些属性描述了文件的元数据,可以帮助用户或操作系统更好地管理文件。
- 文件操作:用户或程序可以通过一系列的文件操作来访问和管理文件,如创建文件、打开文件、读取文件内容、写入数据到文件、关闭文件、删除文件等。这些操作通常由操作系统提供的文件系统接口实现
文件可以根据其内容和用途进行多种分类。以下是几种常见的文件分类方式:
- 按内容分类
- 文本文件:
- 纯文本文件:只包含基本的ASCII或Unicode字符,没有特殊的格式或编码。
- 源代码文件:如C语言的.c文件,Python的.py文件等,包含程序员的源代码。
- 富文本文件:如Markdown、RTF或HTML文件,它们支持格式化的文本,如字体、颜色、列表等。
- 二进制文件
- 可执行文件:如Windows下的.exe文件或Unix/Linux下的无扩展名可执行文件,它们包含可以直接由计算机执行的机器代码。
- 图像文件:如.jpg、.png、.gif等,用于存储图像数据。
- 音频和视频文件:如.mp3、.wav、.mp4等,用于存储音频和视频数据。
- 数据文件:如数据库文件、配置文件等,包含特定格式的二进制数据。
- 按用途分类
- 系统文件:
- 操作系统文件:用于支持操作系统运行的必要文件,如内核、驱动程序等。
- 配置文件:用于存储程序或系统的配置信息,如Windows的.ini文件或Linux的配置文件。
- 用户文件:
- 文档文件:如Word文档、PDF文件等,用于存储文本、图像等信息。
- 数据文件:用于存储特定应用程序的数据,如电子表格、数据库文件等。
- 按访问权限分类
- 只读文件:用户只能读取文件内容,不能修改或删除文件。
- 写入文件:用户可以向文件写入数据,但通常不能读取已存在的数据(除非文件被打开为读写模式)。
- 读写文件:用户既可以读取文件内容,也可以向文件写入数据。
- 按存储位置分类
- 本地文件:存储在本地计算机硬盘或其他存储设备上的文件。
- 网络文件:存储在网络服务器或云存储上的文件,可以通过网络访问。
2 文件指针
文件指针在C语言中是一个核心概念,用于指向打开的文件,从而实现对文件的读写操作。它实际上是一个指向FILE结构体的指针,这个结构体包含了文件的各种信息,如文件缓冲区、当前读写位置等。
文件指针的主要作用包括:
- 标识文件:通过文件指针,程序可以识别和操作特定的文件。一旦文件被打开,文件指针就被关联到该文件上,后续的所有文件操作(如读取、写入)都将通过这个指针进行。
- 定位文件位置:文件指针还用于跟踪文件中的当前位置。在读取或写入文件时,文件指针会自动移动,指向下一个要读取或写入的位置。如果需要从文件的特定位置开始操作,可以通过移动文件指针来实现。
- 错误检测:通过检查文件指针的状态,程序可以检测文件操作是否出错。例如,如果尝试打开一个不存在的文件,文件指针可能会返回NULL,表示操作失败。
文件指针定义的语法格式:
FILE *文件指针变量;
其中,FILE结构体的具体定义并不直接暴露给程序员,因为是一个由标准库实现的内部类型,它的确切定义可能会因不同的C标准库实现而有所不同。这样做是为了允许标准库实现者根据特定的系统或平台特性进行自定义和优化。
FILE在stdio.h文件中的文件类型声明:
typedef struct
{ short level; // 缓冲区“满”或“空”的程度
unsigned flags; // 文件状态标志
char fd; // 文件描述符
unsigned charhold; // 如无缓冲区不读取字符
short bsize; // 缓冲区的大小
unsigned char *buffer; // 数据缓冲区的位置
unsigned char *curp; // 指针,当前的指向
unsigned istemp; // 临时文件,指示器
short token; // 用于有效性检查
}FILE;
虽然不能直接看到FILE的定义,但你可以大致了解它通常包含的内容。FILE结构体通常包含以下信息:
- 一个指向文件缓冲区的指针,用于存储待读取或待写入的数据。
- 文件位置指示器,用于跟踪文件中的当前读写位置。
- 标志位,用于表示文件的状态(如是否出错、是否已到文件末尾等)。
- 可能还有其他与特定实现相关的字段。
扩展,c语言中有三个特殊的文件指针无需定义,在程序中可以直接使用
- stdin: 标准输入 默认为当前终端(键盘),例如,scanf、getchar函数默认从终端获得数据
- stdout:标准输出 默认为当前终端(屏幕),例如,printf、puts函数默认输出信息到终端
- stderr:标准错误输出设备文件 默认为当前终端(屏幕),例如,perror函数默认输出程序错误信息到终端
---E N D---
喜欢的记得关注哦!
您的支持是我们前进的动力!
相关推荐
- 4万多吨豪华游轮遇险 竟是因为这个原因……
-
(观察者网讯)4.7万吨豪华游轮搁浅,竟是因为油量太低?据观察者网此前报道,挪威游轮“维京天空”号上周六(23日)在挪威近海发生引擎故障搁浅。船上载有1300多人,其中28人受伤住院。经过数天的调...
- “菜鸟黑客”必用兵器之“渗透测试篇二”
-
"菜鸟黑客"必用兵器之"渗透测试篇二"上篇文章主要针对伙伴们对"渗透测试"应该如何学习?"渗透测试"的基本流程?本篇文章继续上次的分享,接着介绍一下黑客们常用的渗透测试工具有哪些?以及用实验环境让大家...
- 科幻春晚丨《震动羽翼说“Hello”》两万年星间飞行,探测器对地球的最终告白
-
作者|藤井太洋译者|祝力新【编者按】2021年科幻春晚的最后一篇小说,来自大家喜爱的日本科幻作家藤井太洋。小说将视角放在一颗太空探测器上,延续了他一贯的浪漫风格。...
- 麦子陪你做作业(二):KEGG通路数据库的正确打开姿势
-
作者:麦子KEGG是通路数据库中最庞大的,涵盖基因组网络信息,主要注释基因的功能和调控关系。当我们选到了合适的候选分子,单变量研究也已做完,接着研究机制的时便可使用到它。你需要了解你的分子目前已有哪些...
- 知存科技王绍迪:突破存储墙瓶颈,详解存算一体架构优势
-
智东西(公众号:zhidxcom)编辑|韦世玮智东西6月5日消息,近日,在落幕不久的GTIC2021嵌入式AI创新峰会上,知存科技CEO王绍迪博士以《存算一体AI芯片:AIoT设备的算力新选择》...
- 每日新闻播报(September 14)_每日新闻播报英文
-
AnOscarstatuestandscoveredwithplasticduringpreparationsleadinguptothe87thAcademyAward...
- 香港新巴城巴开放实时到站数据 供科技界研发使用
-
中新网3月22日电据香港《明报》报道,香港特区政府致力推动智慧城市,鼓励公私营机构开放数据,以便科技界研发使用。香港运输署21日与新巴及城巴(两巴)公司签署谅解备忘录,两巴将于2019年第3季度,开...
- 5款不容错过的APP: Red Bull Alert,Flipagram,WifiMapper
-
本周有不少非常出色的app推出,鸵鸟电台做了一个小合集。亮相本周榜单的有WifiMapper's安卓版的app,其中包含了RedBull的一款新型闹钟,还有一款可爱的怪物主题益智游戏。一起来看看我...
- Qt动画效果展示_qt显示图片
-
今天在这篇博文中,主要实践Qt动画,做一个实例来讲解Qt动画使用,其界面如下图所示(由于没有录制为gif动画图片,所以请各位下载查看效果):该程序使用应用程序单窗口,主窗口继承于QMainWindow...
- 如何从0到1设计实现一门自己的脚本语言
-
作者:dong...
- 三年级语文上册 仿写句子 需要的直接下载打印吧
-
描写秋天的好句好段1.秋天来了,山野变成了美丽的图画。苹果露出红红的脸庞,梨树挂起金黄的灯笼,高粱举起了燃烧的火把。大雁在天空一会儿写“人”字,一会儿写“一”字。2.花园里,菊花争奇斗艳,红的似火,粉...
- C++|那些一看就很简洁、优雅、经典的小代码段
-
目录0等概率随机洗牌:1大小写转换2字符串复制...
- 二年级上册语文必考句子仿写,家长打印,孩子照着练
-
二年级上册语文必考句子仿写,家长打印,孩子照着练。具体如下:...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- wireshark怎么抓包 (75)
- qt sleep (64)
- cs1.6指令代码大全 (55)
- factory-method (60)
- sqlite3_bind_blob (52)
- hibernate update (63)
- c++ base64 (70)
- nc 命令 (52)
- wm_close (51)
- epollin (51)
- sqlca.sqlcode (57)
- lua ipairs (60)
- tv_usec (64)
- 命令行进入文件夹 (53)
- postgresql array (57)
- statfs函数 (57)
- .project文件 (54)
- lua require (56)
- for_each (67)
- c#工厂模式 (57)
- wxsqlite3 (66)
- dmesg -c (58)
- fopen参数 (53)
- tar -zxvf -c (55)
- 速递查询 (52)