C++ Can";eof";陷入了一股潮流?

C++ Can";eof";陷入了一股潮流?,c++,fstream,ofstream,C++,Fstream,Ofstream,我找不到这方面的任何信息。是否可以,若可以,在什么情况下可以设置eofbit(stream_instance.eof()的含义为true) 我更感兴趣的是一个独立的ofstream,它与某个fsstream中的ifstream无关,因此ifstream无法设置“共享”eofbit(如果可能的话) 如果我只是写入一个文件,而磁盘上没有空间,或者操作系统没有为写入提供另一个空间,那么我只希望设置failbit或badbit,但写入文件时到达文件末尾对我来说没有意义。但是,我没有找到关于这一点的讨论。

我找不到这方面的任何信息。是否可以,若可以,在什么情况下可以设置eofbit(stream_instance.eof()的含义为true)

我更感兴趣的是一个独立的ofstream,它与某个fsstream中的ifstream无关,因此ifstream无法设置“共享”eofbit(如果可能的话)


如果我只是写入一个文件,而磁盘上没有空间,或者操作系统没有为写入提供另一个空间,那么我只希望设置failbit或badbit,但写入文件时到达文件末尾对我来说没有意义。但是,我没有找到关于这一点的讨论。

没有。
eof()
返回
eofbit
,这对于没有关联输入流的输出流没有实际意义

eofbit
表示输入操作到达输入序列的末尾

,表107

将枚举设置
eofbit
的操作,它们都只作用于输入流


我们可以想象一些奇怪的特定于实现的场景,在这种场景中,写入文件时会遇到EOF(与其他错误情况相反)——可能我们正在通过一些操作系统函数写入一个固定大小的文件缓冲区——但据我所知,标准库抽象并没有处理这种情况,而且我一开始从未见过或听说过这样的API。

我仍然不明白为什么必须在
std::ofstream
中设置
eof
位。如果您
close()
std::ofsteam
执行操作,并且该操作没有失败,我将假定输出成功。不过,我在某个地方读到,这只是“高于”操作系统级别。为硬盘授予此权限可能需要更多的工作(std C++之外),例如执行
fsync()
。(我的肚子是对的:)我一直在想,例如在FAT32文件系统上,当达到4GB标记时,可能会强制执行EOF。但这似乎不太可能,我只是想“大声说出来”。在这一点上,当POSIX
write发生这种情况时,EFBIG有一个
errno
。我想这会映射到
failbit
badbit
,因为通常这是一个错误(与EOF相反,EOF是正常和预期的行为)