5.6 标准I/O库_读和写流

    一旦打开了流,则可在三种不同类型的非格式化I/O中进行选择,对其进行读、写操作:

  • 每次一个字符的I/O。一次读或写一个字符,如果流是带缓冲的,则标准I/O函数会处理所有缓冲。
  • 每次一行的I/O.
  • 直接I/O。直接I/O这个术语来自ISO C标准,有时也被称为二进制I/O、一次一个对象I/O、面向记录的I/O或面向结构的I/O。

 

1. 输入函数

    以下三个函数可用于一次读一个字符:

  • #include <stdio.h>
  • int getc(FILE *fp);
  • int fgetc(FILE *fp);
  • int getchar(void);

三个函数的返回值:成功返回值下一个字符,已到达文件结尾或出错则返回EOF

    getchar等价于getc(stdio)。前两个函数的区别是getc可被实现为宏,而fgetc则不能实现为宏。这意味着:

getc的参数不应当是具有副作用的表达式。

因为fgetc一定是一个函数,所以可以得到其地址。这就允许将fgetc的地址作为一个参数传送给另一个函数。

调用fgetc所需时间很可能长于调用getc,因为调用函数通常所需的时间长于调用宏。

    注意,不管是出错还是到达文件尾端,这三个函数都会返回同样的值。为了区分这两种不同的情况,必须调用ferror或feof。

  • #include <stdio.h>
  • int ferror(FILE *fp);
  • int feof(FILE *fp);

条件为真返回非0值,否则返回0。

  • void clearerr(FILE *fp);

    在大多数实现中,为每个流在FILE对象中维持了两个标志:

  • 出错标志。
  • 文件结束标志。

    调用clearerr则清除这两个标志。

    从流中读取数据以后,可以调用ungetc将字符再押送回流中。

  • #include <stdio.h>
  • int ungetc(int c, FILE *fp);

返回值:成功返回c,出错返回EOF

    押送回到流中的字符以后又可从流中读出,但读出字符的顺序与押送回的顺序相反。应当了解,虽然ISO C允许实现支持任何次数的回送,但是它要求实现提供一次只送回一个字符,不能期望一次能送回多个字符。

    回送的字符不必一定是上一次读到的字符。不能回送EOF。但是当已经到达文件尾端时,仍可以回送一字符。下次读将返回该字符,再次读则返回EOF。之所以能这样的原因是一次成功ungetc调用会清除该流的文件结束标志。

 

2. 输出函数

    对应于上面所述的每个输入函数都有一个输出函数。

  • #include <stdio.h>
  • int putc(int c, FILE *fp);
  • int fputc(int c, FILE *fp);
  • int putchar(int c);

返回值:成功返回c,出错返回EOF

    与输入函数一样,putchar(c)等效于putc(c, stdout),putc可实现为宏,而fputc则不能实现为宏。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值