『C程序设计』读书笔记系列文章之第十二章 文件

简介:
) 概述

c语言将文件看成一个字符的序列,分为ASCII文件(文本文件)和二进制文件。即一个c文件就是一个字节流或二进制流。
ASCII文件每一个字节放一个ASCII码,代表一个字符,输出与字符一一对应,便于逐个处理字符,但占用空间较多。二进制文件按内存中的存储形式原样输出到磁盘上,节省空间,由于输出与字符不对应,不能直接输出字符形式,一般用于保存中间结果。目前c对文件的处理只有缓冲文件系统一种方法,即无论是从程序到磁盘文件还是从磁盘文件到程序,数据都要先经过缓冲区,待缓冲区充满后,才集中发送。

2) 文件夹类型指针

在缓冲文件系统中,关键的概念是文件指针。因为每个被使用的文件都在内存中开辟一个缓冲区,来存放文件有关信息。这些信息保存在一个结构体变量中,该结构体类型是由系统定义的,取名为FILE,在stdio.h中定义。
FILE *fp;
定义了一个文件指针变量fp,以后对文件的操作都是通过fp进行的。

3) 文件的打开

在对文件读写之前,要先打开文件。
打开文件的函数为:fopen(),调用方式为:
FILE *fp;
fp=fopen( filename,使用文件方式 );
fopen()失败返回一个空指针NULL,成功则返回一个指向"filename"的文件指针,赋给fp,这样fp就和打开的文件联系在一起了。或者说,fp指向了"filename"。
文件使用方式:r,w,a,rb,wb,ab,r+,w+,a+,rb+,wb+,ab+,具体含义要记住。

4)文件的关闭

为了防止数据丢失,程序结束前,务必将打开的文件关闭,即将文件指针与文件脱钩。用fclose(文件指针)函数关闭文件,执行函数后,先将缓冲区中的数据送到磁盘文件,然后释放文件指针。成功返回0,失败返回非0。

5)文件的读写

文件打开后,就可以对其读写了,常用的文件读写函数有:
①fputc和fgetc
fputc将一个字符写到文件,形式为fputc( ch, fp );将字符ch写入fp所指向的文件。成功返回该字符,失败返回EOF,EOF在stdio.h中定义为符号常量-1。
fgetc从指定文件读入一个字符,该文件必须是以读或读写方式打开的。调用形式为ch=fgetc(fp);从fp指向的文件读入一个字符赋给ch,当文件结束时,fgetc返回一个EOF,我们可以用函数feof(fp)来判断是否已到文件尾,返回1表示已到文件尾,否则返回0。这个函数适用于文本文件和二进制文件。
②fread和fwrite函数
可以读写一组数据。调用形式如下:
fread( buffer, size, count, fp );
fwrite( buffer, size, count, fp );
buffer为一个指针,对fread来讲,是指从文件读出数据的存放地址,对fwrite来讲,是要写入文件的数据的地址。
size 要读写的字节数
count 要进行读写多少个size字节的数据项(书上这么说)其实就是读写的次数
fp 文件指针
这两个函数返回值成功为1,失败为非1,一般用于二进制文件的读写。
注意:有些c编译系统不具备这两个函数。
③fprintf()和fscanf()函数
格式化输出和输入函数,与printf()和scanf()作用相似,只有一点不同,fprintf()和fscanf()的读写对象不是终端而是磁盘文件。调用方式:
fprintf(文件指针,格式字符串,输出列表);
fscanf(文件指针,格式字符串,输出列表); 
④fgets()和fputs()函数
作用是读写一个字符串,如:
fgets(str,n,fp);
意为从fp指向的文件读出n-1个字符,存放到str中,成功返回str的首地址。
fputs( "China", fp );
把字符串China写入fp指向的文件。成功返回0,失败为非0。

6)文件的定位

文件中有一个位置指针,指向当前读写的位置,如果要强制改变位置指针的位置,可以用有关函数:
①rewind 使位置指针重新返回文件的开头
②fseek()
fseek()函数可以任意改变位置指针的位置,以实现随机读写文件。调用形式:
fseek( 文件指针类型,位移量,起始点 );
起始点有以下三个值:
SEEK_SET或0 文件开始
SEEK_CUR或1 文件当前位置
SEEK_END或2 文件末尾
位移量指以起始点为基点,移动的字节数(正数向文件尾移动,负数向文件头移动),一般位移量用long型数据,以避免大于64K的文件出错。Fseek()函数一般用于二进制文件,因为文本文件要进行字符转换,计算时会发生混乱。
Fseek( fp, 100L, 0 ); 将位置指针从文件头向文件尾移动100个字节处。
Fseek( fp, 50L, 1 ); 将指针从当前位置向文件尾移动50个字节处。
Fseek( fp, -10L, 2 ); 将指针从文件尾向文件头移动10个字节处。
③ftell()
得到流式文件位置指针的当前位置,成功返回相对于文件头的位移量,失败返回-1L。

  另外,由于ANSI C不使用非缓冲文件系统,而其它C系统还用到非缓冲文件系统,所以对于这一章节只是略微的看了一下,不至于以后见到这样的程序不认识,呵呵。这一节主要讲了几个文件读写的有关函数,看了也没做笔记。如果关心的话,自己看一下吧。

  至此,这本语言类的基础书又温习了一遍,由于工作太忙,花了我半个月的时间。不过总的来说,收获还是很大的,有很多以前没有发现的新东西,也有很多以前理解较浅显的东西,这次加深了理解。其实,看完了一章后,最好将书后的习题一一解答,因为这是对这章知识点的考查。同时,动手编一下小程序,也能提高自己的编程能力。
今天把这篇简单的笔记拿出来供朋友们参考,如果有什么不准确的地方,真诚欢迎指正!
联系方式:MSN:loose_went@hotmail.com E-mail:webmaster@vczx.com






   本文转自loose_went博客园博客,原文链接:http://www.cnblogs.com/michaelxu/archive/2008/05/04/1182073.html,如需转载请自行联系原作者




相关文章
|
存储 Unix Java
《C语言程序设计现代方法(第2版)》读书笔记 第二章(二)
《C语言程序设计现代方法(第2版)》读书笔记 第二章(二)
《C语言程序设计现代方法(第2版)》读书笔记 第二章(二)
|
程序员 编译器 C语言
第五章 选择语句《C语言程序设计现代方法(第2版)》读书笔记(二)
第五章 选择语句《C语言程序设计现代方法(第2版)》读书笔记(二)
第五章 选择语句《C语言程序设计现代方法(第2版)》读书笔记(二)
|
存储 C语言
第五章 选择语句《C语言程序设计现代方法(第2版)》读书笔记(一)
第五章 选择语句《C语言程序设计现代方法(第2版)》读书笔记(一)
第五章 选择语句《C语言程序设计现代方法(第2版)》读书笔记(一)
|
存储 Unix 编译器
第七章 基本类型《C语言程序设计现代方法(第2版)》读书笔记(二)
第七章 基本类型《C语言程序设计现代方法(第2版)》读书笔记(二)
第七章 基本类型《C语言程序设计现代方法(第2版)》读书笔记(二)
|
存储 编译器 程序员
第八章 数组《C语言程序设计现代方法(第2版)》读书笔记
我们所见的变量都只是 标量(scalar ):标量具有保存单一数据项的能力。C语言也支持 聚合 (aggregate )变量,这类变量可以存储一组一组的数值。在 C 语言中一共有两种聚合类型: 数组 (array)和结构(structure )。
第八章 数组《C语言程序设计现代方法(第2版)》读书笔记
|
Java 数据库 算法
《Akka应用模式:分布式应用程序设计实践指南》读书笔记9
性能   这也是一个比较大的问题,因为性能不一定是Akka本身的问题,还可能是你代码写的有问题。   优化的第一步就是找出性能的瓶颈,隔离出应用程序里面比较耗时的部分,然后尝试对其优化,减少需要耗费的时间成本。
1673 0
|
缓存 运维 数据库
《Akka应用模式:分布式应用程序设计实践指南》读书笔记8
可用性   简单点来说就是系统能否正常使用。如果系统能够及时响应一个请求,则认为是可用的;如果响应时间过长或者根本不响应,则是不可用的。系统在停机或超载时是不可用的。一般用系统正常运行时长的百分比来计量系统的可用性,例如常常用N个9表示系统的可用性。
1910 0
|
存储 缓存 NoSQL
《Akka应用模式:分布式应用程序设计实践指南》读书笔记6
一致性和可扩展性   一致性是系统内比较复杂的属性,它会随着系统的变化而变化。简单来说,一致性就是数据保持一致,在分布式系统中,可以理解为多个节点中数据的值是一致的。一旦系统具有并行性(分布式只是并行的一种表现),保持一致性就变得困难了,毕竟需要协调全局状态。
1400 0
|
运维 Java
《Akka应用模式:分布式应用程序设计实践指南》读书笔记7
容错   容错绝对是分布式系统最难搞定的事儿,至少我这样认为,因为意外总是会发生。   处理故障在许多方面意味着要放弃全局一致性。Akka是基于不粗要调用方负责处理故障的想法而建立的。它主张由发生故障的actor负责处理问题,在actor不能处理的情况下,会向其“监督者”寻求帮助。
1745 0
|
设计模式 消息中间件 程序员
《Akka应用模式:分布式应用程序设计实践指南》读书笔记1
  作者属于Scala、Akka技术爱好者,但苦于Akka没有关于设计模式的文章,偶尔搜到《Akka应用模式》一书,如获至宝。现整理一些读书笔记和自己的感悟,以供参考。 Actor模型 Actor模型感觉还是很给力的,要是按我以前学习actor模型,绝对会对他嗤之以鼻,这玩儿意能干啥。
1857 0