<iostream> 是如何工作的?(C++)

4

只是出于好奇,iostream 如何访问输入输出系统。(我有一个经常重新发明轮子的坏习惯,想知道是否可以构建与 iostream 类似的自定义输入输出系统。)

4个回答

11

关于IOstreams的详细指南,请参阅书籍《标准C++ IOStreams和Locales》。阅读后,我怀疑您将满足于现状 - IOstreams可能是C++标准库中最复杂的部分。


4

这要视情况而定...

它与操作系统的本地IO系统进行某种交互。它可能在内部使用C库,该库使用系统调用向内核发出请求,或者直接使用系统调用。确切的实现方式高度依赖于平台。

很多人会说不要重复造轮子,但这也可能是一个很好的学习经验。如果你正在使用Windows,可以研究一下Win32 API调用以进行文件处理。如果你使用Linux,则可以使用POSIX/C库,或者使用系统调用(更难,我建议使用C库)。


2

所有流都会进入一个流缓冲区。该流缓冲区将取决于流的类型。ofstream 将进入 fstreambuf;cout 将进入某个未指定的 streambuf。如果您想自定义内容,cout 允许您获取此 streambuf 并可能替换它。

常见的模式是“过滤流缓冲区”,它是一种流缓冲区接口,可以在将其发送到另一个流缓冲区之前转换其输入。这可以与 cout 结合使用:取出原始 streambuf,将其包装在过滤流缓冲区中,然后将该包装器放回 cout 中。您不需要知道原始 streambuf 的工作方式。


1

你当然可以重新发明轮子。

在流操作符中添加了许多复杂性来处理国际字符集。经过深入研究后,我真的不太喜欢它。它非常复杂,完全破坏了易于使用继承的任何机会。它可以工作并且可用。(我想要更改转换期间使用的存储器的行为)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接