C语言自学教程――二十三、《文件操作??下》
2011年07月18日
(2).设置文件缓冲区函数
void setbuf(FILE *stream,char *buf);
void setvbuf(FILE *stream,char *buf,int type,unsigned size);
这两个函数将使得打开文件后,用户可建立自己的文件缓冲区,而不使用fopen()函数打开文件设定的默认缓冲区。
对于setbuf()函数,buf指出的缓冲区长度由头文件stdio.h中定义的宏BUFSIZE的值决定,缺省值为512字节。当选定buf为空时,setbuf函数将使的文件I/O不带缓冲。而对setvbuf函数,则由malloc函数来分配缓冲区。参数size指明了缓冲区的长度(必须大于0),而参数type则表示了缓冲的类型,其值可以取如下值:
type 值 含义
_IOFBF 文件全部缓冲,即缓冲区装满后,才能对文件读写
_IOLBF 文件行缓冲,即缓冲区接收到一个换行符时,才能对文件读写
_IONBF 文件不缓冲,此时忽略buf,size的值,直接读写文件,不再经过文件缓冲区缓冲
5.文件的随机读写函数
前面介绍的文件的字符/字符串读写,均是进行文件的顺序读写,即总是从文件的开头开始进行读写。这显然不能满足我们的要求,C语言提供了移动文件指针和随机读写的函数,它们是:
(1).移动文件指针函数:
long ftell(FILE *stream);
int rewind(FILE *stream);
fseek(FILE *stream,long offset,int origin);
函数ftell()用来得到文件指针离文件开头的偏移量。当返回值是-1时表示出错。
rewind()函数用于文件指针移到文件的开头,当移动成功时,返回0,否则返回一个非0值。
fseek()函数用于把文件指针以origin为起点移动offset个字节,其中origin指出的位置可有以下几种:
origin 数值 代表的具体位置
SEEK_SET 0 文件开头
SEEK_CUR 1 文件指针当前位置
SEEK_END 2 文件尾
例如:
fseek(fp,10L,0);
把文件指针从文件开头移到第10字节处,由于offset参数要求是长整型数,故其数后带L。
fseek(fp,-15L,2);
把文件指针从文件尾向前移动15字节。
(2).文件随机读写函数
int fread(void *ptr,int size,int nitems,FILE *stream);
int fwrite(void *ptr,int size,int nitems,FILE *stream);
fread()函数从流指针指定的文件中读取nitems个数据项,每个数据项的长度为size个字节,读取的nitems数据项存入由ptr指针指向的内存缓冲区中,在执行fread()函数时,文件指针随着读取的字节数而向后移动,最后移动结束的位置等于实际读出的字节数。该函数执行结束后,将返回实际读出的数据项数,这个数据项数不一定等于设置的nitems,因为若文件中没有足够的数据项,或读中间出错,都会导致返回的数据项数少于设置的nitems。当返回数不等于nitems时,可以用feof()或ferror()函数进行检查。
fwrite()函数从ptr指向的缓冲区中取出长度为size字节的nitems个数据项,写入到流指针stream指向的文件中,执行该操作后,文件指针将向后移动,移动的字节数等于写入文件的字节数目。该函数操作完成后,也将返回写入的数据项数。
二、非标准文件的读写
这类函数最早用于UNIX操作系统,ANSI标准未定义,但有时也经常用到,DOS 3.0以上版本支持这些函数。它们的头文件为io.h。
由于我们不常用这些函数,所以在这里就简单说一下。
1.文件的打开和关闭
open()函数的作用是打开文件,其调用格式为:
int open(char *filename, int access);
该函数表示按access的要求打开名为filename的文件,返回值为文件描述字,其中access有两部分内容:
基本模式和修饰符, 两者用 (或)方式连接。修饰符可以有多个, 但基本模式只能有一个。
access的规定
--------------------------------------------------------
基本模式 含义 修饰符 含 义
--------------------------------------------------------
O_RDONLY 只读 O_APPEND 文件指针指向末尾
O_WRONLY 只写 O_CREAT 文件不存在时创建文件, 属性按基本模式属性
O_RDWR 读写 O_TRUNC 若文件存在, 将其长度缩为0, 属性不变
O_BINARY 打开一个二进制文件
O_TEXT 打开一个文字文件
---------------------------------------------------------
open()函数打开成功, 返回值就是文件描述字的值(非负值), 否则返回-1。
close()函数的作用是关闭由open()函数打开的文件, 其调用格式为:
int close(int handle);
该函数关闭文件描述字handle相连的文件。
2.读写函数
int read(int handle, void *buf, int count);
read()函数从handle(文件描述字)相连的文件中, 读取count个字节放到buf所指的缓冲区中,
返回值为实际所读字节数, 返回-1表示出错。返回0 表示文件结束。
write()函数的调用格式为:
int write(int handle, void *buf, int count);
write()函数把count个字节从buf指向的缓冲区写入与handle相连的文件中, 返回值为实际写入的字节数。
3.随机定位函数
lseek()函数的调用格式为:
int lseek(int handle, long offset, int fromwhere);
该函数对与handle相连的文件位置指针进行定位,功能和用法与fseek()函数相同。
tell()函数的调用格式为:
long tell(int handle);
该函数返回与handle相连的文件现生位置指针, 功能和用法与ftell()相同。
来自:莫小斌、QQ996627951
发表评论
-
Lamp开发平台环境搭建
2012-01-20 09:48 642Lamp开发平台环境搭建 2010年08月03日 背景介 ... -
Flex 和 Ogre
2012-01-20 09:48 594Flex 和 Ogre 2011年04月12日 最近和赖 ... -
关于 OGRE 与 OSG 的简单比较
2012-01-20 09:48 1245关于 OGRE 与 OSG 的简单 ... -
SciTE中文配置说明
2012-01-20 09:48 829SciTE中文配置说明 2010年09月01日 SciT ... -
从solaris向linux移植应用程序的技术指导
2012-01-20 09:48 695从solaris向linux移植应用 ... -
幼儿园安全工作考核、奖惩制度
2012-01-19 14:53 1265幼儿园安全工作考核、奖惩制度 2011年12月25日 为 ... -
幼儿园教师奖惩制度
2012-01-19 14:53 557幼儿园教师奖惩制度 20 ... -
幼儿园教职工制度
2012-01-19 14:53 554幼儿园教职工制度 2011年06月11日 一、考勤制度: ... -
幼儿园老师奖惩制度
2012-01-19 14:53 1013幼儿园老师奖惩制度 2012年01月06日 ... -
幼儿园教职工奖惩制度
2012-01-19 14:53 554幼儿园教职工奖惩制度 ... -
c语言(二十二,文件操作②)
2012-01-17 04:36 699c语言(二十二,文件操作②) 2011年10月23日 5 ... -
探索Linux内核空间文件IO实现
2012-01-17 04:36 742探索Linux内核空间文件IO ... -
android 各系统区别(android 1.5- android 3.0)
2012-01-17 04:36 653android 各系统区别(android ... -
论PHP和.Net 哪个更有前景
2012-01-17 04:36 1219论PHP和.Net 哪个更有前景 2011年04月10日 ... -
IT人的10大论坛
2012-01-16 03:29 586IT人的10大论坛 2009年10 ... -
让技术改变生活 程序员的技术梦想 dotey
2012-01-16 03:29 488让技术改变生活 程序员 ... -
中国顶级黑客-----增加了李俊
2012-01-16 03:28 678中国顶级黑客-----增加 ... -
中国黑客排行榜
2012-01-16 03:28 608中国黑客排行榜 2009年1 ...
相关推荐
C语言实例教程C语言实例教程C语言实例教程C语言实例教程C语言实例教程C语言实例教程C语言实例教程C语言实例教程C语言实例教程C语言实例教程C语言实例教程
最全的c语言文件操作知识,含12个Word文档和一个文本文档,经常时间搜索积累合成的最优资源
C语言教程C语言教程C语言教程C语言教程C语言教程C语言教程C语言教程C语言教程C语言教程C语言教程C语言教程C语言教程C语言教程C语言教程C语言教程C语言教程C语言教程C语言教程C语言教程C语言教程C语言教程C语言教程...
C语言基础教程 自学 入门 教程
谭浩强C语言经典教程谭浩强C语言经典教程谭浩强C语言经典教程
C语言入门教程C语言入门教程C语言入门教程C语言入门教程C语言入门教程C语言入门教程C语言入门教程C语言入门教程
看作者就知道,此书是C语言权威教程,值得收藏
C语言文件操作(文件操作) FILE *p 那些的文件操作 我经常做些大型系统需要很多文件操作
Linux下C语言编程入门教程 目录 第一章基础知识 ……………………………………………………………………………4 第二章进程介绍 …………………………………………………………………………10 第三章文件操作 ...
C语言中级教程 C语言回顾
C语言文件操作 C语言文件操作 C语言文件操作
请点击下载文档,里面有链接和密码,超级经典的C语言自学教程,不需要任何基础就能学,是学习其他语言的基础
c语言文件读写操作代码 c语言文件读写操作代码 c语言文件读写操作代码 c语言文件读写操作代码 c语言文件读写操作代码 c语言文件读写操作代码 c语言文件读写操作代码 c语言文件读写操作代码 c语言文件读写操作代码 ...
C语言教程 一、概述 上 下 二、变量和常量 三、运算符 四、表达式和语句 五、编写第一个C语言程序 六、条件语句 七、循环语句和循环控制 八、数组 九、多维数组 十、函数的定义和调用 ...二十三、文件操作
一本经典的C语言教程,一本经典的C语言教程,一本经典的C语言教程,一本经典的C语言教程
C语言解析教程C语言解析教程C语言解析教程C语言解析教程
C语言指针教程C语言指针教程C语言指针教程C语言指针教程C语言指针教程C语言指针教程C语言指针教程C语言指针教程C语言指针教程C语言指针教程C语言指针教程C语言指针教程C语言指针教程C语言指针教程C语言指针教程C语言...
C语言自学经典教程
很多人c语言学习的挺好了,但是关于文件相关的操作却很薄弱,以及文件系统也不熟悉,相信学了基本的文件操作,对于文件系统也会有所熟悉认识
二级C语言视频教程 计算机二级c语言视频教程百度网盘下载