微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 文件I/O编程之: 标准I/O编程

文件I/O编程之: 标准I/O编程

时间:08-13 来源:3721RD 点击:

函数原型

FILE * freopen(const char *path, const char * mode, FILE * stream)

函数传入值

path:包含要打开的文件路径及文件名

mode:文件打开状态(后面会具体说明)

stream:已打开的文件指针

函数返回值

成功:指向FILE的指针
失败:NULL

2.关闭文件

(1)函数说明。

关闭标准流文件的函数为fclose(),该函数将缓冲区内的数据全部写入到文件中,并释放系统所提供的文件资源。

(2)函数格式说明。

fclose()函数格式如表6.18所示。

表6.18 fclose()函数语法要点

所需头文件

#include <stdio.h>

函数原型

int fclose(FILE * stream)

函数传入值

stream:已打开的文件指针

函数返回值

成功:0
失败:EOF

3.读文件

(1)fread()函数说明。

在文件流被打开之后,可对文件流进行读写等操作,其中读操作的函数为fread()。

(2)fread()函数格式。

fread()函数格式如表6.19所示。

表6.19 fread()函数语法要点

所需头文件

#include <stdio.h>

函数原型

size_t fread(void * ptr,size_t size,size_t nmemb,FILE * stream)

函数传入值

ptr:存放读入记录的缓冲区

size:读取的记录大小

nmemb:读取的记录数

stream:要读取的文件流

函数返回值

成功:返回实际读取到的nmemb数目
失败:EOF

4.写文件

(1)fwrite()函数说明。

fwrite()函数用于对指定的文件流进行写操作。

(2)fwrite()函数格式。

fwrite()函数格式如表6.20所示。

表6.20 fwrite()函数语法要点

所需头文件

#include <stdio.h>

函数原型

size_t fwrite(const void * ptr,size_t size, size_t nmemb, FILE * stream)

续表

函数传入值

ptr:存放写入记录的缓冲区

size:写入的记录大小

nmemb:写入的记录数

stream:要写入的文件流

函数返回值

成功:返回实际写入的记录数目
失败:EOF

5.使用实例

下面实例的功能跟底层I/O操作的实例基本相同,运行结果也相同(请参考6.3.1节的实例),只是用标准I/O库的文件操作来替代原先的底层文件系统调用而已。

读者可以观察哪种方法的效率更高,其原因又是什么。

#include <stdlib.h>

#include <stdio.h>

#define BUFFER_SIZE 1024 /* 每次读写缓存大小 */

#define SRC_FILE_NAME "src_file" /* 源文件名 */

#define DEST_FILE_NAME "dest_file" /* 目标文件名文件名 */

#define OFFSET10240 /* 复制的数据大小 */

int main()

{

FILE *src_file, *dest_file;

unsigned char buff[BUFFER_SIZE];

int real_read_len;

/* 以只读方式打开源文件 */

src_file = fopen(SRC_FILE_NAME, "r");

/* 以写方式打开目标文件,若此文件不存在则创建 */

dest_file = fopen(DEST_FILE_NAME, "w");

if (!src_file || !dest_file)

{

printf("Open file error\n");

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);

return 0;

}

读者可以尝试用其他文件打开函数进行练习。

6.5.2 其他操作

文件打开之后,根据一次读写文件中字符的数目可分为字符输入输出、行输入输出和格式化输入输出,下面分别对这3种不同的方式进行讲解。

1.字符输入输出

字符输入输出函数一

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top