标准I/O库(fopen、Fread、fwrite、fclose、fflunsh)

标准I/O库

​ 标准I/O库(stdio)及其头文件stdio.h为系统调用提供了一个通用的接口,这个库是ANSI标准C的一部分,在很多方面使用标准I/O库和使用描述符一样,首先需要打开一个文件以建立一个访问路径,这个操作的返回值将作为其他I/O库函数的参数。在I/O库中,与描述符对应的是流,以FILE类型的指针实现。

fopen函数

#include”stdio.h”
FILE * fopen (const char *filename,const char *mode)

​ fopen打开由filename参数指定的文件,并把它与一个文件流关联起来。mode参数指定文件的打开方式

  • “r”或“rb”:以只读方式打开;
  • “w”或“wb”:以写方式打开,并把文件长度截断为0;
  • “a”或“ab”:以写方式打开,新内容加到后面;
  • “r+”或“rb+”或“r+b”:以更新方式打开;
  • “w+”:以更新的方式带宽,并把文件长度截断为0;
  • “a+”:以更新的方式打开,新内容追加在文件尾。

字母b表示文件是一个二进制文件而不是文本文件。

fopen成功时返回一个非空的FILE *指针,失败返回NULL,文件流和fd一样是有限的在stdio.h中定义FOPEN_MAX来定义的

fread函数

​ fread库函数用于一个从文件流读取数据,数据从文件流stream读到由ptr指向的数据缓冲区里,fread和fwrite都是对数据记录进行操作,size参数指向每个数据记录的长度,计数器nitems给出要传输的记录个数。它的返回值是成功读到数据缓冲区里的记录个数(而不是字节数)。当到达文件尾时,它的返回值可能会小于nitems,甚至可以是零。

#include"stdio.h"

size_t fread(void *ptr ,size_t size ,size_t nitems,FILE *stream); // 返回值为成功读到缓冲区的个数,nitems是读缓冲区的个数

​ 对所有向缓冲区写数据的标准I/O来说,为数据分配空间和检查错误是程序员的责任,同时使用ferror和feof函数来做这些事。

fwrite函数

​ fwrite和fread类似,返回的是成功写入的记录个数。

#include"stdio.h"

size_t fwrite(const void *ptr ,size_t sieze,size_t nitems,FILE *stream );

fclose函数

​ fclose函数关闭指定文件流,使所有尚未写出的数据都写出,如果程序需要确保数据已经全部写出,就应该调用fclose函数。虽然当程序正常结束时,会自动对所有还打开的文件流调用fclose函数,但这样就无法检查由fclose产生的抱错了。

#include"stdio.h"

int fclos (FILE *stream);

fflush函数

​ fflush函数的作用是吧文件流里的所有未写出数据立刻写出,在调试的时候可以用它来确定程序是正在写数据而不是被挂起了。

fgetc、getc和getchar函数

fgetc函从文件流里取出下一个字节并把它作为一个字符返回。当它们到达文件尾或出现错误时,返回EOF,必须通过ferror或feof来区分这两种情况。函数原型如下:

#include"stdio.h"

int fgetc(FILE *stream);
int getc(FILE *stream);
int getchar();

getc函数的作用和fgetc一样,但它有可能被实现为一个宏,如果是这样,stream参数就可能被计算不止一次,所以它不能有副作用(不能改变变量的值)。此外你也不能保证能够使用getc的地址作为一个指针函数。

getchar相当于getc(stdin),它从标准输入里读取下一个字符。

fputc、putc和putchar函数

fputc函数把一个字符写到一个输出文件流中,它返回写入的值,如果失败返回EOF

#include"stdio.h"

int fputc(int c ,FILE *stream);
int putc(int c,FILE *stream);
int putchar (int c);

​ 类似fgetcgetc之间的关系,putc函数的作用也相当于fputc,但它可能被实现为一个宏,putchar函数相当于putc(c,stdout),它把单个字符写到标准输出,putchargetchar都是吧字符当做int类型而不是char使用,这就允许文件尾取值-1,这是一个超出字符数字编码范围的值。

fgets和gets函数

fgets函数从输入文件流stream里读取一个字符串

#include"stdio.h"

char *fgets(char *s,int n, FILE *stream);
char *gets(char *s);

fgets把读到的字符写到s指向的字符串里,知道出现下面某种情况:遇到换行符,已经传输了n-1个字符,或者达到文件尾。它会把遇到的换行符也传递到接受字符串里,再加上一个表示结尾的空字符\0。一次调用最多传输n-1个字符,因为它必须把空字节加上,返回值为一个指向字符串s的指针。如果文件流已经到文件尾,fgets返回一个空指针并设置errno以指出处错误的类型。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值