- 流的定向决定了所读、写的字符是单字节还是多字节的。(如ASCII字符集是单字节的,国际字符集是多字节的)
#include<stdio.h> #include<wchar.h> int fwide(FILE *fp, int mode) 宽定向返回正值,字节定向返回负值,未定向返回0fwide并不改变已定向的流方向
- 三个标准I/O流通过预定义文件指针stdin、stdout和stderr加以引用。
- 缓冲
标准I/O库提供缓冲的目的是尽可能减少使用read和write调用次数。
UNIX里面关于标准IO的几种缓冲机制:
1、全缓冲 。全缓冲指的是系统在填满标准IO缓冲区之后才进行实际的IO操作;注意,对于驻留在磁盘上的文件来说通常是由标准IO库实施全缓冲。一般调用malloc获得缓冲区,调用fflush强制写入磁盘
2、行缓冲 。在这种情况下,标准IO在输入和输出中遇到换行符时执行IO操作;注意,当流涉及终端的时候,通常使用的是行缓冲。
3、无缓冲 。无缓冲指的是标准IO库不对字符进行缓冲存储;注意,标准出错流stderr通常是无缓冲的。
- 标准I/O效率
图5-6中显示了对统一文件(98.5MB,300万行)进行行操作多的的数据
对于这三个标准的io版,其用户时间都大于表3-2中的最佳read版本,因为在每次读一个字符的标准I/O版本中有一个要执行一亿次的循环。而对每读一行的版本要执行三百万多次循环。在read版本中,其循环只需执行12611次,主要决定了缓冲区的长度8192字节。
其差别就是在cpu时间和等待I/O结束所消耗的时间。
- 临时文件
sptr可以是NULL或者一个栈地址。当sptr为NULL时,返回一个内部静态内存地址(保存了临时文件名),当下一次以NULL调用函数的时候,该内存会被修改。栈地址必须至少有L_tmpnam内存,这样名字保存在那个数组里面,如数组 char buffer [L_tmpnam],注意用此文件名去打开文件流所创建的文件都是临时性的。tmpnam可以被一个程序最多调用TMP_MAX(最少为几千次),每一次它都会返回一个不同的文件名。#include<stdio.h> 功能 产生一个唯一的文件名 函数原型 char *tmpnam(char *sptr);
标准I/O库中提供了两个函数来创建临时文件,这个函数是其中之一,另外一个是tmpnam。值得注意的是,每调用一次tmpnam,就产生一个不同的文件名,最多调用次数为TMP_MAX,该宏定义在<stdio.h>中。创建的临时文件在程序退出时会被自动删除。功 能 以wb+形式创建一个临时二进制文件 函数原型 FILE *tmpfile(void);
- 内存流
标准I/O库把数据缓存在内存中,因此每次一个字符和每次一行的I/O更有效。我们可以通过调用setbuf货setvbuf函数让I/O库使用我们自己的缓冲区。