登录 注册
当前位置:主页 > 资源下载 > 49 > 直接转换方法:将数据流图映射为模块结构图的读写流

直接转换方法:将数据流图映射为模块结构图的读写流

  • 更新:2024-11-05 16:15:32
  • 大小:5.82MB
  • 推荐:★★★★★
  • 来源:网友上传分享
  • 类别:Unix - 操作系统
  • 格式:PDF

资源介绍

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环境高级编程 下载