首页 > 解决方案 > 什么是 C 中的更新流?

问题描述

在 n1256 7.19.5.2 第 2 段(用我的粗体字):

如果 stream 指向未输入最近操作的输出流或更新流,则 fflush 函数会导致该流的任何未写入数据被传递到主机环境以写入文件;否则,行为未定义。

如果没有“更新流”这个词,整个段落就会有意义。但我不知道它是什么。标准本身并没有介绍它。谷歌搜索似乎不起作用。它的意义是什么?

标签: cstreamlanguage-lawyer

解决方案


在此上下文中,术语“更新”表示为读取和写入而打开的文件。

该术语用于C99 标准fopen第 7.19.5.3 节中的函数规范:

3参数mode指向一个字符串。如果字符串是下列之一,则文件以指示的模式打开。否则,行为未定义。

r打开文本文件进行阅读

w将长度截断为零或创建文本文件以进行写入

追加;打开或创建文本文件以在文件末尾写入

rb打开二进制文件进行读取

wb截断为零长度或创建二进制文件进行写入

ab附加;打开或创建二进制文件以在文件末尾写入

r+打开文本文件进行更新(读写)

w+截断为零长度或创建文本文件进行更新

a+附加;打开或创建文本文件以进行更新,在文件末尾写入

r+brb+打开二进制文件进行更新(读写)

w+bwb+截断为零长度或创建二进制文件进行更新

a+bab+附加;打开或创建二进制文件进行更新,在文件末尾写入

...

6当以更新模式打开文件时(“+”作为上述mode参数值列表中的第二个或第三个字符),可以在关联的流上执行输入和输出。但是,如果没有对函数fflush或文件定位函数(fseekfsetposrewind输入操作遇到文件结尾。在某些实现中,使用更新模式打开(或创建)文本文件可能会打开(或创建)二进制流


推荐阅读