《C语言参悟之旅》-读书笔记(九)
第十章 文件
文件就是一组相关元素或数据的有序集合,每个集合都有一个符号化的指代(文件名)
文件通常都被存在外部存储器上,它只在需要使用时被调入内存
一.相关概念:
1.主要分类
1). 普通文件:驻留在磁盘或其他外部介质上的一些有序数据集,
2).设备文件(逻辑上的文件): 和主机相连的各种外部设备:如显示器、打印机、键盘
2.流的概念
流就是表示文本输入(或输出)数据的字符代码的连续序列
在C语言中,“普通文件”就是一个字节流或二进制流。
3.流的工作原理
流在启动时,会自动创建3个标准文件指针
stdin:从操作系统向标准输入设备(通常为键盘)输入数据所构成的“标准输入流”;
stdout:从操作系统向输出设备(通常为屏幕)输出信息所构成的”标准输出流“
stderr:由屏幕显示报告出错信息构成的”标准报错流“
C语言还提供了:标准打印机和标准串行设备
小结:流是磁盘或其它外围设备中存储数据的源点或终点。
产生数据的叫做输入流;
消耗数据的叫做输出流;
4.处理文件的方法:
1)缓存文件系统(格式化系统)

2)非缓冲文件系统(非格式化系统)
5.文本文件和二进制文件

二、文件的基本操作
1、stdio.h中对FILE的结构体类型声明如下:
Typedef struct{ short level; //记录打开文件流的缓冲区填入数据的情况 unsigned flags; //文件状态标志 char fd; //文件句柄, unsigned char hold; //若无缓冲区,则不读取字符 short bsize; //文件缓冲区大小 unsigned char * buffer;//文件缓冲区指针 unsigned char *curp ;//当前激活的文件指针 unsigned istemp; //临时文件标识 short token; //用于有效性检查}FILE;2、文件的打开
fopen(filename,mode);如:FILE * pfile;pfile = fopen("file1", "r") //建立pfile与文件“file1”的关联,即pfile指向file文件pfile = fopen("d:\\file2.dat","rb"); //打开位于D盘根目录下的文件file2.dat文件的关闭
3、fclose(pfile)
关闭一个当前打开的文件,fclose在关闭文件前线清楚文件缓存区,关闭成功则返回0,否则返回EOF(-1)
4、文件中的字符写
fputc(c,pfile);fputc('a', pfile);//把字符写了pfile所指向的文件中5、文件的字符读
fgetc(pfile);//指向一个已经打开的文件,返回值是一个读取出的字符
6.文件中字符串读
char * str[3];fgets(str, 3, pfile);//把pfile指向的文件中2个字符读到str字符串中(第三个是‘\0’)
7.文件中字符串写
fputs("abcd”, pfile);//把字符串“abcd”写入pfile所指的文件中
8.数据块的读写:
int fread(void * buffer,int size, int count, FILE * pfile)//buffer是指向数据内存区域的指针,size则表示简要进行读写的字节数,count代表要读/写多少个size字节的数据项int fread(void * buffer,int size, int count, FILE * pfile)//从buffer指针指向的缓冲区中读取长度为count个size字节的数据项
三、文件缓存区的处理
int fflush( FILE *pfile )//清除由pfile指向的文件缓冲区里的内容。int fflushall( void )//清除所有打开文件缓冲区里的内容。
void setbuf(FILE * pflie ,char * buffer);//把缓冲区域流相关联
第11章 动态数据结构
数组分配固定大小的内存分配方法称之为静态内存分配。动态分配就是在程序的执行过程中动态地分配或者回收存储空间的分配内存的方法。
一、实现的方法
void * malloc(unsigned int size);//在内存的动态存储区中分配一个长度为size的连续空间。
void * realloc(void * p, unsigned int size);//该函数将p所指向内存区域大小给为size,size可以比原来分配的空间大或者小
void * free( void * p);//释放指针p所指向的内存区域
free()函数支付的是指针指向的内存,而不是指针。指针是个变量,只有程序结束时才被销毁。所以释放后内存后最好把指针指向NULL;
说明:
1)由于分配可能不成功,因此申请了内存空间后,必须检查是否分配成功。
2)malloc( )和free( )应该是配对的
3)虽然malloc( )的类型是void * ,任何类型的指针都可以转换为void * , 但是处于安全考虑,最好还是在前面进行牵制类型转换
- 39楼tututututu12141分钟前
- hehe
- 38楼oHuiSeGuiJi1246743分钟前
- HAO
- 37楼frankmx32644分钟前
- 1111
- 36楼wang364049分钟前
- 不错,感触很深
- 35楼oqqabel123456781小时前
- 好
- 34楼z520zzz1小时前
- ok
- 33楼quannii昨天 22:59
- 写的很好 支持楼主发表那么精彩简练的文章
- 32楼oZhangJunHeng昨天 22:42
- 好
- 31楼shuiyunjian0727昨天 22:05
- 蛮不错的 很用用处。
- 30楼daling535昨天 21:34
- RTT 3E4R2
- 29楼q2240378543昨天 21:00
- 很好
- 28楼Jeremy1044633192昨天 20:20
- 很不错哦。对学习有帮助,谢啦。
- 27楼qqwdbb11nsy306nsy昨天 20:20
- ok
- 26楼yinguo_gregre昨天 20:01
- 希望继续
- 25楼zhaodongchunfeng昨天 19:11
- 赚积分,赚积分,需要十五字吗,十五字,十五字。
- 24楼hsxgzs昨天 18:27
- 不错
- 23楼Sugela__Online昨天 16:49
- 我是想来拿积分的
- 22楼liuzhangzhenlong昨天 15:32
- ok
- 21楼shuiyunjian0727昨天 14:02
- 蛮不错的 很用用处。
- 20楼hhc2801507昨天 12:53
- 不错
- 19楼cvt001昨天 12:37
- 学习
- 18楼Zhang710438470昨天 11:53
- 太棒了
- 17楼zys74126昨天 11:05
- 很不错,谢谢分享
- 16楼Ben_1987昨天 11:05
- 不错不错 很好,不错。很好的资料。很好,不错。很好的资料。很好,不错。很好的资料。很好,不错。很好的资料。很好,不错。很好的资料。
- 15楼zhenxinghanyue昨天 09:53
- 恩 不错
- 14楼wonderfulboyTT昨天 09:17
- 不错不错
- 13楼ajl456ajl昨天 04:10
- 不错,总结的很好
- 12楼hbsywzq1昨天 02:25
- 不错啊!!!!1
- 11楼cgzbit2011昨天 02:07
- 总结的很详细
- 10楼c396085388昨天 01:02
- 很好
- 9楼s1061968404昨天 00:00
- 很不错,费心了
- 8楼hbsywzq1昨天 23:50
- 谢谢啊!!!!!
- 7楼jonhson01昨天 19:26
- 沙发、、、、
- 6楼qingyunyoulu昨天 17:15
- 不错
- 5楼wangzhengqqq昨天 15:15
- 很好
- 4楼bing110120135昨天 14:25
- 不错
- 3楼a1105003230昨天 12:51
- a
- 2楼daling535昨天 12:03
- zxcef rq3r1rR
- 1楼Ihaveadream168前天 10:00
- 很好,不错。很好的资料。