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

时间:2009-05-21 20:48:06

标签: c++ input iostream

出于好奇,iostream如何访问输入输出系统。 (我有一个不断重新发明轮子的坏习惯,我想知道我是否可以为iostream等人建立一个自定义输入输出系统。)

4 个答案:

答案 0 :(得分:9)

有关IOstreams的详细指南,请参阅书籍Standard C++ IOStreams and Locales。阅读之后我怀疑你会满足于处理现状 - IOStreams可能是C ++标准库中最复杂的部分。

答案 1 :(得分:3)

这取决于......

它以某种方式与操作系统的本机IO系统交互。它可能在内部使用C库,它使用对内核的系统调用,或者它可能直接使用系统调用。确切的实现高度依赖于平台。

许多人会说不要重新发明轮子,但这可能是一个很好的学习经历。如果您使用的是Windows,请查看Win32 API调用以进行文件处理。如果您使用Linux,请使用POSIX / C库,或使用系统调用(更难,我建议使用C库)。

答案 2 :(得分:1)

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

为了处理国际字符集,流运营商增加了许多复杂功能。仔细看了之后我真的不在乎它了。它非常复杂,完全破坏了轻松使用继承的机会。虽然有效但可以使用。 (我想改变它在转换过程中使用的存储行为)

答案 3 :(得分:1)

所有溪流都去了streambuf。 streambuf将取决于流的类型。一股流向fstreambuf; cout去了一些未指定的streambuf。如果你想自定义东西,cout允许你获得这个streambuf并可能替换它。

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