《unix高级环境编程》标准I/O——FILE对象

来源:互联网 发布:java final关键字用法 编辑:程序博客网 时间:2024/06/03 16:37

     前面介绍的《文件I/O》都是针对文件描述符进行操作的,并且是非缓冲区方式的。本节记录的标准I/O的操作是在流进行的,当用标准I/O打开或创建一个文件时,已使一个流与一个文件相关联。

       标准I/O文件的流可用与单字节或多字节(宽)字符集。流的定向决定所读、写的字符是单字节还是多字节。流最初被创建时,并没有定向,若在未定向的流上使用一个多字节I/O函数,则将该流的定向设置为宽定向,若是使用一个单字节I/O函数,则将该流的定向设置为字节定向。只有两个函数可以改变流的定向:freopen函数清除一个流的定向;fwide函数设置流的定向。

[cpp] view plaincopy在CODE上查看代码片派生到我的代码片
  1. /*********** 
  2.  * 设置流的定向 
  3.  * 返回值: 
  4.  *  1、若流是宽定向则返回正值; 
  5.  *  2、若流是字节定向则返回负值; 
  6.  *  3、若流是未定向则返回0; 
  7.  * 函数原型: 
  8.  * #include <stdio.h> 
  9.  * #include <wchar.h> 
  10.  * int fwide(FILE *fp, int mode); 
  11.  * 说明:根据mode的不同值,fwide操作不同: 
  12.  *  1、mode为负值,fwide试图使指定的流是字节定向; 
  13.  *  2、mode为正值,fwide试图使指定的流是宽定向; 
  14.  *  3、mode值为0,fwide不设置流的定向,返回标识该流定向的值; 
  15.  * 注意:fwide并不改变已定向流的定向 
  16.  * *************/  

标准输入、输出和出错

[cpp] view plaincopy在CODE上查看代码片派生到我的代码片
  1. /************ 
  2.  * 标准输入     stdin 
  3.  * 标准输出     stdout 
  4.  * 标准出错     stderr 
  5.  * ***********/  

缓冲区

[cpp] view plaincopy在CODE上查看代码片派生到我的代码片
  1. /************** 
  2.  * 缓冲:目的是减少数据的读写次数; 
  3.  * 标准I/O的缓冲类型: 
  4.  *  1、全缓冲:填满标准I/O缓冲区之后才进行实际I/O操作; 
  5.  *  2、行缓冲:挡在输入和输出中遇到换行符,则执行I/O操作; 
  6.  *  3、不带缓冲:标准I/O库不对字符进行缓冲存储; 
  7.  * 
  8.  * 函数功能:更改缓冲区类型 
  9.  * 返回值:若成功则返回0,若出错则返回非0; 
  10.  * 函数原型: 
  11.  * #include <stdio.h> 
  12.  * void setbuf(FILE *fp, char *buf); 
  13.  * int setvbuf(FILE *fp,char *buf, int mode, ssize_t size); 
  14.  * 注意:使用这两个函数必须确定fp流已经打开。 
  15.  * 
  16.  * setbuf函数打开或关闭缓冲机制,参数buf指定一个长度为BUFSIZE的缓冲区。 
  17.  * sevbuf函数根据参数mode指定缓冲类型: 
  18.  * mode参数: 
  19.  *      _IOFBF  全缓冲 
  20.  *      _IOLBF  行缓冲 
  21.  *      _IONBF  不带缓冲 
  22.  *____________________________________________________________ 
  23.  |函数   | mode   | buf    | 缓冲区及长度       | 缓冲类型    | 
  24.  |_______|________|________|____________________|_____________| 
  25.  |setbuf |        | 非空   | 长度BUFSIZE的buf   | 全或行缓冲  | 
  26.  |       |        | NULL   | 无缓冲区           | 不带缓冲区  | 
  27.  |_______|________|________|____________________|_____________| 
  28.  |setvbuf| _IOFBF | 非空   | 长度size的buf      | 全缓冲      | 
  29.  |       |        | NULL   | 合适长度缓冲区     |             | 
  30.  |       | _IOLBF | 非空   | 长度size的buf      | 行缓冲      | 
  31.  |       |        | NULL   | 合适长度的缓冲区   |             | 
  32.  |       | _IONBF | 忽略   | 无缓冲区           | 不带缓冲区  | 
  33.  |_______|________|________|____________________|_____________| 
  34.  ********/  
0 0
原创粉丝点击