与缓冲密切相关的文件流

文件流的定义来源于水,数据就像水一样的被传输。但是这里流并非指的是数据,而是指的是一个容器,这个容器有两种结构,一种是结构式的容器,另一种是流式的容器,对应的文件就是结构式的文件和流式的文件,所谓流式的文件指的是无结构的文件按照一个或多个字节读或者写,数据就像流水一样往里或者外流动,对于结构式的文件则是按照一定的规则把同属性的数据归为一类,并通过索引来获取数据。

对于流的理解,在Unix高级编程中并没有定义,但是一些定义太过于官方,这里拿出Unix高级编程的原话来归纳流的定义。

标准I/O文件流可以用于单字节或多字节(“宽”)字符集。流的定向决定了所读,写的字符是单字符还是多字节的。当一个流最初被创建时,它并没有定向。若在未定向的流上使用一个多字节I/0函数,则将流的定向设置为宽定向的。若在未定向的流上使用一个单子I/O函数,则将该流的定向设为字节定向。只有两个函数可改变流的定向。freopen函数清除一个流的定向;fwide函数可用于设置流的定向。函数原型如下: int fwide(FILE *fp, int mode);

这里做简要的说明,所谓的定向的意思就是上面说的是一个字节的写或读,还是多个字节的写或读。再来看fwide函数,上面说它是用来设置流的定向的,那么如何设置,可以从参数可以看出它是对一个文件的操作,因为在应用层想对文件操作就必须通过文件描述符(fp),并把fp传给对应的I/O库就实现相应的操作,那么很明显fwide操作的就是fp所指向的文件,上面说fwide函数是来设置流的定向,那么这个流很明显就是文件的意思。

在P116原话如下:

当打开一个流时,标准I/O函数fopen返回一个指向FILE对象的指针。该对象通常是一个结构,它包含了标准I/O库为管理该流需要的所有信息,包括用于实际I/O的文件描述符、指向用于该流缓冲区的指针、缓冲区的长度、当前在缓冲区中的字符数以及错误标志等。

应用程序没有必要检测FLE对象。为了引用一个流,需将FILE指针作为参数传递给每个标准I/O函数。

很明显上面说的流就是文件,但是之所是流而不是文件而是把概念抽象化了,正如设备在操作系统中统一看做文件,而对于那些存储无结构数据的容器(比如文件)都可以叫做流,所以换句话说流就是存储数据的容器,但是该容器不分结构存储数据

这里只是简单的理解,理解并不深入,若有大佬还请写下正确的见解,大家一起学习,拜托了!!!!


分享到:


相關文章: