-
鸿鹄论坛提供的华为认证H35-211 HCNP-Access Network题库涵盖了读写流相关知识点
资源介绍
5.6 读和写流
一旦打开了流,则可在三种不同类型的非格式化 I / O中进行选择,对其进行读、写操作。
(5 . 11节说明了格式化 I / O函数,例如p r i n t f和s c a n f。)
(1) 每次一个字符的 I / O。一次读或写一个字符,如果流是带缓存的,则标准 I / O函数处理所
有缓存。
(2) 每次一行的 I / O。使用f g e t s和f p u t s一次读或写一行。每行都以一个新行符终止。当调用
f g e t s时,应说明能处理的最大行长。5 . 7节将说明这两个函数。
(3) 直接I / O。f r e a d和f w r i t e函数支持这种类型的 I / O。每次I / O操作读或写某种数量的对象,
而每个对象具有指定的长度。这两个函数常用于从二进制文件中读或写一个结构。 5 . 9节将说
明这两个函数。
直接I/O(direct I/O) 这个术语来自ANSI C标准,有时也被称为:二进制 I / O、
一次一个对象I / O、面向记录的 I / O或面向结构的 I / O。
5.6.1 输入函数
以下三个函数可用于一次读一个字符。
#include
int getc(FILE *f p) ;
int fgetc(FILE *f p) ;
int getchar(void);
三个函数的返回:若成功则为下一个字符,若已处文件尾端或出错则为 E O F
函数g e t c h a r等同于g e t c ( s t d i n )。前两个函数的区别是g e t c可被实现为宏,而f g e t c则不能实现为宏。
这意味着:
(1) getc的参数不应当是具有副作用的表达式。
(2) 因为f g e t c一定是个函数,所以可以得到其地址。这就允许将 f g e t c的地址作为一个参数
传送给另一个函数。
(3) 调用f g e t c所需时间很可能长于调用 g e t c ,因为调用函数通常所需的时间长于调用宏。检
验一下< s t d i o . h >头文件的大多数实现,从中可见g e t c是一个宏,其编码具有较高的工作效率。
这三个函数以unsigned char 类型转换为i n t的方式返回下一个字符。说明为不带符号的理由
是,如果最高位为 1也不会使返回值为负。要求整型返回值的理由是,这样就可以返回所有可
能的字符值再加上一个已发生错误或已到达文件尾端的指示值。在 < s t d i o . h >中的常数E O F被要
9 6 U N I X环境高级编程
下载