C中的File(File*指针)流和C++中的iostream有什么区别?
为什么他们都叫流,他们有共同点吗?
它们都处理文件,"流"只是一个非常通用的术语,表示来自某些来源的数据.
区别主要在于C++的iostream对象是类/对象,而C文件数据是通过定义的f*()函数访问的.
所以基本上,相同的任务,不同的界面风格.
它们通常都是缓冲的,这意味着您在流上执行的I/O与基础系统对象(例如文件)上完成的I/O不匹配.
例如fread()
,读取2个字节的调用可能会尝试从文件读取1,024个字节,如果您接近文件末尾,则可能只返回57个字节.差异全部由流实现隐藏,它将返回2个字节,并记住它的缓冲区中还有55个字节.因此,它将满足下一个读取请求,而根本不会达到文件级别.
编辑:值得指出的是,两种语言(stderr
和cerr
分别)的默认错误流都没有缓冲.这是一个巨大的胜利,因为它增加了及时输出的机会.通过使用printf()
语句喷洒代码来追逐奇怪的崩溃错误时,出于这个特殊原因打印到错误流是一个非常好的主意.