C语言基础之文件操作基本常识

   我们都知道,在C语言中,文件操作都是由库函数来完成的。下面会给大家介绍到输入输出等函数,供参考 。

  由于程序中经常有大量对文件的输入输出操作,它经常构成了程序的主要部分,因而C语言提供了很多输入输出的函数,它们分别用于两种类型文件输入输出系统:即由ANSI标准定义的缓冲文件(也称标准文件(流)输入输出(I/O)系统);另一类是ANSI标准中没有定义的非缓冲文件(也称非标准文件(流)输入输出(I/O)系统)。

  我们已经熟悉了通过键盘和显示器进行输入输出的一些函数,如scanf(),printf()等等,这些通过控制台(键盘、显示器等)进行I/O的操作,可以看作标准文件输入输出系统的一些特例,实际上在标准输入输出系统中的一些函数,有关文件的参数(文件结构指针或称流指针),只要用标准设备的流指针代替,这些标准输入输出函数即成为控制台I/O函数。

  在任何程序执行时,C系统都定义了5个标准设备文件可供使用。自动打开的5个标准设备文件的文件结构指针(在标准I/O系统中)和文件代号将有一个规定值:

  设备 标准文件I/O系统中的流指针名 非标准文件……

  键盘(标准输入) stdin 0

  显示器(标准输出) stdout 1

  显示器(标准错误) stderr 2

  串行口(标准辅助) stdoux 3

  打印机(标准打印) stdprn 4

  这样,不论在标准文件系统还是非标准文件系统中,文件结构只要用上述的流指针或文件代号代替,则这些函数也均适用于控制台设备。

  一、文本流和二进制流

  在C中引入了流(stream)的概念。它将数据的输入输出看作是数据的流入和流出,这样不管是磁盘文件或者是物理设备(打印机、显示器、键盘等),都可看作一种流的源和目的,视他们为同一种东西,而不管其具体的物理结构,即对他们的操作,就是数据的流入和流出。

  这种把数据的输入输出操作对象,抽象化为一种流,而不管它的具体结构的方法很有利于编程,而涉及流的输出操作函数可用于各种对象,与其具体的实体无关,即具有通用性。

  在C中流可分为两大类,即文本流(text stream)和二进制流(binary stream)。所谓文本流是指在流中流动的数据是以字符形式出现。在文本流中,'n'被换成回车CR和换行LF的代码0DH和0AH。而当输出时,则0DH和0AH本换成'n'。

  二进制流是指流动的是二进制数字序列,若流中有字符,则用一个字节的二进制ASCII码表示,若是数字,则用一个字节的二进制数表示。在流入流出时,对n符号不进行变换。例如2001这个数,在文本流中用其ASCII码表示为:

  '2' '0' '0' '1'

  | | | |

  50 48 48 49

  共占4字节。而在二进制流中则表示为:00000111 11010001 用十六进制就是07D1。只占两字节。

  由此看出,二进制流比文本流节省空间,且不用进行对n的转换,这样可以大大加快流的速度,提高效率。因而,对于含有大量数字信息的数字流,可以采用二进制流的方式;对于含有大量字符信息的流,则采用文本流的方式。

  二、流和文件

  在C语言中流就是一种文件形式,它实际上就表示一个文件或设备(从广义上讲,设备也是一种文件)。把流当作文件总觉得不习惯,因而有人称这种和流等同的文件为流式文件,流的输入输出也称为文件的输入输出操作。当流到磁盘而成为文件时,意味着要启动磁盘写入操作,这样流入一个字符(文本流)或流入一个字节(二进制流)均要启动磁盘操作,将大大降低传输效率(磁盘是慢速设备),且降低磁盘的使用寿命。

  为此,C语言在输入输出的使用使用了缓冲技术,即在内存为输入的磁盘文件开辟了一个缓冲区(缺省为512字节),当流到该缓冲区装满后,再启动磁盘一次,将缓冲区内容装到磁盘文件中去。读取文件也是类似。

  在C语言中将此种文件输入输出操作称为标准输入输出,或称流式输入输出(因这种输入输出操作是ANSI C推荐的标准)。还有一种是不带缓冲文件输入输出,称为非标准文件输入输出或低级输入输出,它将由DOS直接管理。关于这两种输入输出文件系统下节将会介绍。

  三、文件FILE的数据结构


  这是Turbo C中使用的定义(在stdio.h文件中),不同的C编译器,可能使用不同的定义,但基本含义变化不会太大。

  flags: 是一个10位的标志字,其具体含义如下:


  其他各字段内容以及flags字段内各位所的功能,请参照其他一些资料。这里不多说了,它目前并不是我们要求的内容。

  应该注意,不要把文件指针和FILE结构指针混为一谈,它们代表两个不同的地址。文件指针指出了对文件当前读写的数据位置,而FILE结构指针是指出了打开文件所对应的FILE结构在内存中的地址,这个指针它实际本身也包含了文件指针的信息。流指针中的各字段是供C语言内部使用的,用户不应该存取它的任何字段。

时间: 2024-12-03 19:41:53

C语言基础之文件操作基本常识的相关文章

c语言编程-关于文件操作函数rename与remove

问题描述 关于文件操作函数rename与remove 我把文件指针都关闭了,可是调用rename(重命名文件)和remove(删除文件)函数都不起作用?把中间对文件的操作注释掉也一样,不知道哪里出了问题...两个函数的返回值都是-1,我也去查了原因,网络上讲解的好像都不是呀 解决方案 void onMenuDele(char *id) { FILE *p=fopen("f:employee.txt","r"); //打开文件 if(p==NULL) { printf

ant 基础及文件操作

ant是一个java程序,用来部署.发布程序.ant命令使用当前目录下的build.xml运行Ant,执行缺省的target. 若想指定执行其他文件,如b2.xml而非build.xml,可以用   ant -f b2.xml指令. 得到ant工具 官网apache上下载,解压到某个目录,然后设置环境变量.新开一个console,输入ant,有反应就对了. build.xml的目录结构 关键元素有project.target.property和task. project元素 xml文件第一行是<

C++语言基础-字串操作函数

如果你用过具有string数据类型的编程语言,你可能很不习惯,别人也有同感,所以标准C语言库中提供了几个字串操作函数.表1.3列出了最常用的字串操作函数及其用法说明.关于每个函数的详细说明和实例,见C++ Builder联机帮助. 表1.3字串操作函数 函数 说明 strcat() 将字串接合到目标字串的末尾 strcmp() 比较两个字串是否相等 strcmpi() 比较两个字串是否相等,不考虑大小写 strcpy() 将字串内容复制到目标字串中 strstr() 扫描字串中第一个出现的字串

C++语言基础 例程 文件的随机读写

贺老师的教学链接  本课讲解 示例:写到尾再从头读 #include <iostream> #include <fstream> #include <cstdlib> using namespace std; int main( ) { int a[10], b[10]; fstream iofile("f1.dat",ios::in|ios::out); if(!iofile) { cerr<<"open error!&quo

提前认识软件开发(12) 配置文件读取及文件操作

在通信领域的软件开发项目中,C语言是主流的编程语言,而文件操作在其中又占有很重要的地位.此外,为了体现产品的灵活性,可添加配置文件对某些重要的参数进行按需配置.这就要求程序能够准确读取到各个配置项的值. 本文以一个实际的小软件为例,介绍了C语言中配置文件的读取方法和重要的文件操作函数的使用方法,为相关软件开发项目提供了有益的参考. 1.前言 在一般的软件项目中,常常需要用C语言对文件进行操作.在诸如对账之类的程序中,尤其如此.而C语言中有关文件操作的函数多达数十种,熟悉常用函数(如fopen.f

C++编程思想3-利用C++进行文件操作封装C函数

我们知道在C语言中许多文件操作的函数 很零散,在使用的时候不得不四处查找 ,我们是否能向C++中 的   CFile类等一样封装我们自己的文件操作呢?当然可以,我们这里我封装的是 C语言的文件操作函数  .实际上我们可以直接封装win32的API 函数 利用文件句柄进行文件操作,MFC的CFile类封装的就是 WIN32的API ,这里我只做测试用C来实现封装类File ,下面的File类可以实现对文件的读写 以及清空功能,简单的功能反应出面向对象的程序设计的好处,将对文件袋饿操作封装成了一个整

C语言文件操作

        文章出自:海子         修改:㈠輩子.戀蒶--标哥                                           C语言文件操作解析(二)        C语言中对文件进行操作必须首先打开文件,打开文件主要涉及到fopen函数.fopen函数的原型为        FILE* fopen(const char *path,const char *mode)        其中path为文件路径,mode为打开方式        1)对于文件路径,只需

node基础-文件系统-文件写操作

文件操作频率最高的就是读跟写.nodejs的文件的读取API在<node基础-文件系统-读取文件>里已经简单介绍过,本文就简单介绍下nodejs的文件写API. nodejs的文件操作均提供了同步.异步两种方式,写操作也是同样的,常用的两个接口为fs.writeFile(异步).fs.writeFileSync(同步),下面就来看看他们的使用以及区别. fs.writeFile(filename, data, [options], callback) 先来看下API说明 /** * 往文件里异

让你提前认识软件开发(18):C语言中常用的文件操作函数总结及使用方法演示代码

第1部分 重新认识C语言 C语言中常用的文件操作函数总结及使用方法演示代码           在C语言中,有关文件操作的函数多达数十种,但并非每个函数都经常会被用到.        本文对实际软件开发项目中常用的C文件操作函数的用法进行了总结,并用实际的C代码来演示了它们的用法.   1. C语言中常用的文件操作函数总结 (1) fopen 作用:打开文件. 表头文件:#include <stdio.h> 定义函数:FILE *fopen(const char *path, const ch