• 正文
  • 相关推荐
申请入驻 产业图谱

飞凌嵌入式ElfBoard-标准IO接口之读文件

11/09 10:46
606
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

1.fgetc

对单个字符的读操作,只能操作文本文件。

1)头文件

#include <stdio.h>

2)函数原型

int fgetc(FILE *stream);

3)参数

stream:目标文件的文件指针。

4)返回值

若读取成功,返回读取到的字符,若失败或者到达文件末尾,返回EOF(-1)。

5)示例:(以只读方法打开ftest文件,单字节读取内容并打印)

#include <stdio.h>

int main()

{

FILE *fp = fopen("ftest", "r");   //读文件测试,以只读方式打开前面创建的ftest文件

if (!fp) {

printf("error: ftest openn");

return -1;

}

int fgc = fgetc(fp);

if (fgc == EOF) {

printf("error: ftest fgetcn");

return -1;

}

printf("%cn", (char)fgc);  //由于fgetc是int型返回,字符内容需要强制转换成char

return 0;

}

6)编译运行并查看测试结果

H

2.fgets

对一行字符的读操作(一行的概念是至多包含一个换行符),只能操作文本文件。当读取(n-1)个字符,或者读取到换行符,或者到达文件末尾时,它会停止。

1)头文件

#include <stdio.h>

2)函数原型

char *fgets(char *ptr, int size, FILE*stream);

3)参数

ptr:指向字符数组的指针,用于存储从文件中读取的字符串。

size:要读取的最大字符数,超过 *ptr字符数组的大小会导致内存越界。

stream:要读取的文件指针。

4)返回值

若读取成功,返回指向缓存区(存放读取到的内容)的指针,若失败或者到达文件末尾,返回NULL。 5)示例:(以只读方法打开ftest文件,循环读取完整内容并打印)

#include <stdio.h>

int main()

{

char buf[6];

FILE *fp = fopen("ftest", "r");

if (!fp) {

printf("error: ftest openn");

return -1;

}

while (fgets(buf, 6, fp)) {   //while循环读取,如果实际文件长度较长,是有必要的

printf("ftest fgets: %sn", buf);

}

return 0;

}

6)编译运行并查看测试结果

ftest fgets: HELLO

ftest fgets:  WORL

ftest fgets: D!!!   //ftest文件内容最后是换行符,所以这里有一次换行

//这里的空白是printf打印中使用了“n”换行

3.fread

按块以二进制数据格式从文件中读取若干数据。虽然可以操作二进制或者文本文件,但读取文本文件需要注意换行符之类的文本字符。

1)头文件

#include <stdio.h>

2)函数原型

size_t fread(void *buf, size_t size, size_t nmemb, FILE *stream);

3)参数

buf:指向读取后存放数据的缓冲区。

size:要读取的每个块的大小,以字节为单位。

nmemb:要读取块的个数,每个块的大小为 size 字节。

stream:要读取的文件指针。

4)返回值

返回读取的块数量,若等于nmemb,表示读取成功;若返回值小于nmemb,表示出错或者到达文件末尾。

5)示例:(以只读方法打开ftest文件,循环读取完整内容并打印)

 

#include <stdio.h>

int main()

{

char buf[6];

FILE *fp = fopen("ftest", "r");

if (!fp) {

printf("error: ftest openn");

return -1;

}

while (1) {

if (fread(buf, sizeof(char), 6, fp) < 6) {    //读取到文件末尾,则停止循环

printf("ftest fgets: %sn", buf);

break;

}

printf("ftest fgets: %sn", buf);

}

return 0;

}

6)编译运行并查看测试结果

ftest fgets: HELLO

ftest fgets: WORLD!

ftest fgets: !!

LD!      //此处是由于buf[3]-buf[5]的内容并未更新(是第二次读取的内容),第三次读取只有三个字符“!”、"!"、“n”,只更新了buf[0]-buf[2]

相关推荐