2、标准IO

文章详细介绍了C语言中的基本文件操作函数,包括使用FILE指针进行文件操作,如fopen用于打开文件,fclose关闭文件,fread和fwrite分别用于文件读写,fseek设置文件位置,feof检测文件结束,ferror检查错误,以及clearerr清除错误标志。这些函数提供了比系统调用更方便的接口,并具有较好的可移植性。
摘要由CSDN通过智能技术生成

为了提供比底层系统调用更为方便、 简洁、 且可移植性更好的调用接口, 于是就出现了 C语言函数库。 在本章节中将会对基本的文件操作库函数进行学习。

 

1、FILE指针

FILE 指针的作用相当于文件 IO 中的文件描述符, 对于标准 I/O 库函数来说, 它们的操作是围绕 FILE 指针进行的, 当使用标准 I/O 库函数打开或创建一个文件时, 会返回一个指向FILE 类型对象的指针(FILE *), 使用该 FILE 指针与被打开或创建的文件相关联, 然后该FILE 指针就会被用于后续的标准 I/O 操作(使用标准 I/O 库函数进行 I/O 操作)。 FILE 数据结构定义在标准 I/O 库函数头文件 stdio.h 中。

 

2、fopen

头文件和函数原型:

#include <stdio.h> 
FILE *fopen(const char *pathname, const char *mode);

pathname:字符串类型,打开或创建的文件路径和文件名

mode:字符串类型,用于指定文件的打开方式,如:

返回值:返回NULL异常

例:

 

 

 

3、fclose

头文件和函数原型:

#include <unistd.h> 

int close((FILE *stream);

stream:FILE 指针

返回值:成功返回0。失败返回-1,并会设置errno来指示错误原因

 

 

4、fread

头文件和函数原型:

#include <stdio.h> size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);

ptr:存放读到的数据缓存区

size:从文件读取 nmemb 个数据项, 每一个数据项的大小为 size 个字节, 所以总共读取的数据大小为 nmemb * size 个字节

nmemb:指定了读取数据项的个数

stream:FILE 指针

返回值:调用成功时返回读取到的数据项的数目(数据项数目并不等于实际读取的字节数, 除非参数 size 等于 1); 如果发生错误或到达文件末尾, 则 fread()返回的值将小于参数 nmemb, 那么到底发生了错误还是到达了文件末尾, fread()不能区分文件结尾和错误, 究竟是哪一种情况,此时可以使用 ferror()或 feof()函数来判断。

例:

 

 

5、fwrite

头文件和函数原型:

#include <stdio.h> 

size t fwrite(void *ptr, size t size, size t nmemb, FILE *stream);

ptr:存放读到的数据缓存区

size:从文件写入 nmemb 个数据项, 每一个数据项的大小为 size 个字节, 所以总共写入的数据大小为 nmemb * size 个字节

nmemb:指定了写入数据项的个数

stream:FILE 指针

返回值:调用成功时返回写入的数据项的数目(数据项数目并不等于实际写入的字节数, 除非参数size 等于 1); 如果发生错误, 则 fwrite()返回的值将小于参数 nmemb(或者等于 0)。

由此可知, 库函数 fread()、 fwrite()中指定读取或写入数据大小的方式与系统调用 read()、 write()不同, 前者通过 nmemb(数据项个数) *size(每个数据项的大小) 的方式来指定数据大小,而后者则直接通过一个 size 参数指定数据大小。

例:

 

 

 

6、fseek(用于设置文件读写位置偏移量)

头文件和函数原型:

#include <stdio.h> 
int fseek(FILE *stream, long offset, int whence);

stream:FILE 指针

offset:偏移量,字节单位,可以正负。负数表示向前移动,整数表示向后移动。

whence:当前位置的基点,可以使用以下三组值:

SEEK_SET: 相对于文件开头

SEEK_CUR:相对于当前的文件读写指针位置

SEEK_END:相对于文件末尾

返回值:成功返回当前位移大小,失败返回-1。

例:

 

 

7、feof(用于fread出错原因)

头文件和函数原型:

#include <stdio.h> int feof(FILE *stream);

stream:FILE 指针

返回值:如果 end-of-file (文件末尾)标志被设置了, 则调用 feof()函数将返回一个非零值, 如果 end-of-file 标志没有被设置, 则返回 0。 当文件的读写位置移动到了文件末尾时, end-of-file 标志将会被设置。

例:

8、ferror(测试参数 stream 所指文件的错误标志)

头文件和函数原型:

#include <stdio.h> 
int ferror(FILE *stream);

stream:FILE 指针

返回值:如果错误标志被设置了则返回 1, 否则返回 0。

 

9、clearerr

当调用 feof()或 ferror()校验这些标志后, 通常需要清除这些标志, 避免下次校验时使用到的是上一次设置的值, 此时可以手动调用 clearerr()函数清除标志。

头文件和函数原型:

#include <stdio.h> 

void clearerr(FILE *stream);

stream:FILE 指针

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值