文件I/O编程之: 标准I/O编程
2.关闭文件
(1)函数说明。
关闭标准流文件的函数为fclose(),该函数将缓冲区内的数据全部写入到文件中,并释放系统所提供的文件资源。
(2)函数格式说明。
fclose()函数格式如表6.18所示。
表6.18 fclose()函数语法要点
所需头文件 |
#includestdio.h> |
函数原型 |
intfclose(FILE*stream) |
函数传入值 |
stream:已打开的文件指针 |
函数返回值 |
成功:0 |
3.读文件
(1)fread()函数说明。
在文件流被打开之后,可对文件流进行读写等操作,其中读操作的函数为fread()。
(2)fread()函数格式。
fread()函数格式如表6.19所示。
表6.19 fread()函数语法要点
所需头文件 |
#includestdio.h> |
函数原型 |
size_tfread(void*ptr,size_tsize,size_tnmemb,FILE*stream) |
函数传入值 |
ptr:存放读入记录的缓冲区 |
size:读取的记录大小 |
|
nmemb:读取的记录数 |
|
stream:要读取的文件流 |
|
函数返回值 |
成功:返回实际读取到的nmemb数目 |
4.写文件
(1)fwrite()函数说明。
fwrite()函数用于对指定的文件流进行写操作。
(2)fwrite()函数格式。
fwrite()函数格式如表6.20所示。
表6.20 fwrite()函数语法要点
所需头文件 |
#includestdio.h> |
函数原型 |
size_tfwrite(constvoid*ptr,size_tsize,size_tnmemb,FILE*stream) |
续表
函数传入值 |
ptr:存放写入记录的缓冲区 |
size:写入的记录大小 |
|
nmemb:写入的记录数 |
|
stream:要写入的文件流 |
|
函数返回值 |
成功:返回实际写入的记录数目 |
5.使用实例
下面实例的功能跟底层I/O操作的实例基本相同,运行结果也相同(请参考6.3.1节的实例),只是用标准I/O库的文件操作来替代原先的底层文件系统调用而已。
读者可以观察哪种方法的效率更高,其原因又是什么。
#includestdlib.h>
#includestdio.h>
#defineBUFFER_SIZE1024/*每次读写缓存大小*/
#defineSRC_FILE_NAMEsrc_file/*源文件名*/
#defineDEST_FILE_NAMEdest_file/*目标文件名文件名*/
#defineOFFSET10240/*复制的数据大小*/
intmain()
{
FILE*src_file,*dest_file;
unsignedcharbuff[BUFFER_SIZE];
intreal_read_len;
/*以只读方式打开源文件*/
src_file=fopen(SRC_FILE_NAME,r);
/*以写方式打开目标文件,若此文件不存在则创建*/
dest_file=fopen(DEST_FILE_NAME,w);
if(!src_file||!dest_file)
{
printf(Openfileerrorn);
exit(1);
}
/*将源文件的读写指针移到最后10KB的起始位置*/
fseek(src_file,-OFFSET,SEEK_END);
/*读取源文件的最后10KB数据并写到目标文件中,每次读写1KB*/
while((real_read_len=fread(buff,1,sizeof(buff),src_file))>0)
{
fwrite(buff,1,real_read_len,dest_file);
}
fclose(dest_file);
fclose(src_file);
return0;
}
读者可以尝试用其他文件打开函数进行练习。
linux操作系统文章专题:linux操作系统详解(linux不再难懂)linux相关文章:linux教程
评论