缓冲区及重定向

回顾

-scanf读入原则

单字符读入,跳过空格制表换行

-getchar读入原则:单字符读入,读取每个字符包括空格制表换行与putchar一起被定义为供预处理器使用的宏,不是真正意义上的函数

 

I/O函数:所有系统都通用的具有可移植性的函数,处理文件输入、输出的程序也使用这些函数

 

输入形式分两种:

-缓冲输入:按下enter键后才能使用输入的数据

-无缓冲输入:输入的字符立即被程序使用,多用于游戏中按键对应直接的指令。

 

ANSI和C规定输入都是缓冲的,但之前K&R时将输入类型交与编译器的编写者决定

    -conio.h头文件:

                                 提供支持无缓冲输入的函数

                                  例如:

                                   兼容IBM PC的编译器

                                   回显无缓冲输入getche(回显即输入的字符直接显示在显示器上)

                                  无回显无缓冲输入getch

 

 

UNIX系统中

ioctl(UNIX库函数,非c定义函数)指定待输入类型,然后使用getchar()完成相应操作

ansi c中 用setbuf()和setvbuf()控制缓冲,但因为系统内部设置可能无法使用,所以ANSI没有可以调用无缓冲输入的标准方式

                                  

 

缓冲区:临时储存区

 

-缓存区存在的意义:

 将若干字符作为一个快传递比单个传递字符更有效率

 可以修改输入时的错误,如没有缓存区,错误的数据将立即被使用,造成错误的计算结果。

 

缓冲类型

-完全缓冲I/O:在填满缓冲区之后才会刷新缓冲区,通常用于文件输入。缓冲区常见大小为512或4096字节。

-行缓冲I/O:在读入换行符后刷新缓冲区

 

 

处理文件

文件为储存器中储存信息的区域。

有些程序涉及处理一些文件,这需要程序去打开,读取,(甚至为文件读入新数据)然后关闭文件。这些处理文件的步骤可以通过c的库函数实现,也可通过主机操作系统的基本文件工具直接处理文件(这种直接调用操作系统的函数叫底层I/O),但是由于操作系统的不同(例如储存文件方式不同等)文件,无法为底层I/O建立标准库,还有一种方式就是使用I/O包,创建用于处理文件的标准模型和一套标准I/O函数

 

流:实际输入或输出映射的理想化数据流stdin流表示键盘输入,stdout流表示屏幕输入,getchar putchar printf scanf都是标准I/O包成员处理这两个流

 

判断文件结尾

-规定文件大小,超过字节将停止录入

-使用特殊字符标记结尾,Ctrl+Z。

除调用操作系统判断结尾外,c语言中getchar函数通过返回值EOF判断文件是否到达结尾,(getchar如读入成功返回值在0-255间)

 

重定向

-使用文件方式一:使用特定函数处理文件

-使用文件方式二:设计能与键盘和屏幕互动的程序,重定向输入到文件使用getchar获取内容和再从文件输出

 

c具有重定向特性且能在缺乏重定向特性的系统中模拟重定向。

 

重定向运算符

project

-<-将程序和sdin流相连,读取文本文件中的字符

->-将程序和sdout流相连,输出文本文件中的字符、

如组合重定向的话,输出文件名不能和输入名一样,重定向运算符只能连接程序和文件,不可链接文件与文件,程序与程序,不可重定向多个对象。

->>-将输入数据添加到文件末尾

-|-将文件的输出连接到另一个文件的输入

你可能感兴趣的:(缓冲区及重定向)