标准I/O

1、流和FILE对象


2、标准输入、标准输出和标准出错

    stdin, stdout, stderr.

3、缓存

(1)全缓存。在这种情况下,当填满标准I/O缓存后才进行实际I/O操作。对于驻在磁盘上的文件通常是由标准I/O库 实施全缓存的。在一个流上执行第一次I/O操作时,相关标准I/O函数通常调用malloc获得需使用的缓存。

术语:刷新(flush)。

(2)行缓存。在这种情况下,当在输入和输出中遇到新行符时,标准IO执行IO操作。这允许我们一次输出一个字符(putc),但只有在写了一行之后才进行实际IO操作。当流涉及一个终端时(例如标准输入和标准输出),典型地使用行缓存。

(3)不带缓存。标准IO库不对字符进行缓存。如果用标准IO函数写若干字符到不带缓存的流中,则相当于用write系统调用函数将这些字符写至相关联的打开文件上。标准出错流stderr通常是不带缓存的,这就使得出错信息可以尽快显示出来,而不管它们是否含有一个新行字符。

ASCI C要求下列缓存特征:
(1)当且仅当标准输入和标准输出并不涉及交互作用设备时,它们才是全缓存的。
(2)标准出错决不会是全缓存的。


更改缓存类型:

#include <stdio.h>

void setbuf(FILE *fp, char *buf);

int setvbuf(FILE *fp,char *buf, int mode, size_t size);
/*返回:若成功则为0,若出错则为非0 */


可以使用setbuf函数打开或关闭缓存机制。为了带缓存进行IO,参数buf必须指向一个长度为BUFSIZ的缓存。为了关闭缓存,将buf设置为NULL。

使用setvbuf,可以精确地说明所需的缓存类型。

mode 参数:
    _IOFBF        全缓存
    _IOLBF        行缓存
    _IONBF        不带缓存



#include <stdio.h>

int fflush(FILE *fp);

/*返回:若成功则为0,若出错则为EOF */

fflush函数强制刷新一个流。作为一种特殊情形,如若fp是NULL,则此函数刷新所有输出流。



4、打开流

#include <stdio.h>

FILE *fopen(const char *pathname, const char *type);

FILE *freopen(const char *pathname, const char *type, FILE *fp);

FILE *fdopen(int filedes, const char *type);

/*返回:若成功则为文件指针,若出错则为NULL */

你可能感兴趣的:(编程,c,linux,unix)