问题标签 [iostream]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
9 回答
18221 浏览

c++ - 杀死一个阻塞的 Boost::Thread

我正在编写一个阻止来自两个输入的应用程序istreams

从任何一个读取istream都是同步(阻塞)调用,因此,我决定创建两个Boost::threads 来进行读取。

这些线程中的任何一个都可以到达“结束”(基于接收到的一些输入),一旦到达“结束”,两个输入流都会停止接收。不幸的是,我不知道哪个会这样做。

因此,我不能join()同时处理两个线程,因为只有一个线程(无法预先确定哪个线程)将实际返回(解除阻塞)。

我必须以某种方式强制对方退出,但它在等待输入时被阻塞,所以它不能自己决定是时候返回(条件变量或其他)。

他们是一种方法吗:

  • 向 boost::thread 发送信号,或
  • 强制一个istream“失败”,或
  • 杀死一个 Boost::thread?

笔记:

  • 其中之一istreamscin
  • 我正在尝试重新启动该过程,因此我无法以禁止重置输入流的方式关闭它们。

编辑:

  • 我确实知道何时到达“结束”,并且我确实知道哪个线程已成功完成,哪些需要被杀死。这是我需要弄清楚的杀戮(或从 istream 读取的不同策略)。
  • 我需要两个线程正确退出和清理:(

谢谢!

0 投票
1 回答
6575 浏览

c++ - std::wcout 到 Xcode 中的控制台窗口

在 Xcode 项目中,如果我std::cout用来写入控制台,则输出很好。

但是,如果我使用std::wcout我没有输出。

我知道这是 C++ 中的一个棘手问题,我一直在谷歌搜索以尝试在 Xcode 案例中找到特定的解决方案。我发现建议应该起作用的几件事是:

这些都没有任何区别。在我辞职花接下来的几周研究 facets API 以便能够写入控制台之前,我想我会在这里与尊敬的观众核实一下。

[更新]

我认为我一直遇到的问题的原因实际上与我尝试打印的一些字符串的特定编码有关。

如果我只发送一个字符串文字,使用L"my string" syntax它就可以了!看来这是使用 UTF32 - little endian encoding。

但是,我一直将它与使用 NSUTF32BigEndianStringEncoding 编码从 Objective C++ 代码传递的字符串混合。正是这种编码组合导致了问题。

我想我们可以认为这件事已经结束了。谢谢阅读。

0 投票
4 回答
13992 浏览

c++ - 为什么 C++ 流使用 char 而不是 unsigned char?

我一直想知道为什么 C++ 标准库使用char类型而不是类型来实例化 basic_[io]stream 及其所有变体unsigned charchar意味着(取决于它是否已签名)您可以对 get() 之类的操作进行上溢和下溢,这将导致所涉及的变量的实现定义值。另一个例子是当你想使用它的put函数将一个未格式化的字节输出到 ostream 时。

有任何想法吗?


注意:我仍然不太相信。因此,如果您知道明确的答案,您仍然可以确实发布它。

0 投票
5 回答
12398 浏览

c++ - 使用 c++ stl 读取大于 4GB 的文件

几周前,我使用 std::ifstream 读取一些文件,但由于文件大于 4GB,因此在打开时立即失败。当时我找不到一个体面的答案来解释为什么它被限制为 32 位文件大小,所以我使用本机 OS API 编写了自己的。

那么,我的问题是:有没有办法使用 std::ifstream/std::ostream 来处理大于 4GB 的文件(IE:标准 c++)

编辑:使用 VC 9 编译器 (Visual Studio 2008) 中的 STL 实现。EDIT2:当然必须有标准的方法来支持大于 4GB 的文件大小。

0 投票
3 回答
9261 浏览

c++ - stdin/stdout/stderr 上的跨平台 (linux/Win32) 非阻塞 C++ IO

我正在尝试通过具有以下特征的标准输入/标准输出找到非阻塞 IO 的最佳解决方案:

  • 只要有足够的数据,就读入n 个大小的块。
  • 如果没有足够的数据,则读入部分块。
  • 如果没有可用数据,则阻塞直到有一些数据(即使它可能小于n)。

目标是在立即处理“控制”代码的同时允许有效传输大型数据集(而不是让它们停留在某个部分填充的缓冲区中)。

我知道我可以通过使用线程和 istream::get() 循环来实现这一点,或者通过编写一堆特定于平台的代码(因为你不能 select() 在 Windows 中的文件句柄上)......((那里也是 istream::readsome() ,这似乎很有希望,但我在谷歌上能找到的唯一结果是人们说它实际上效果不佳。))

由于我没有对这些 API 进行太多编码,也许有更好的方法。

0 投票
3 回答
348 浏览

.net - 使一个流的输出成为另一个流的输入的最佳方法是什么

我想知道除了使用字节缓冲区和循环之外,是否有更好的/内置方式从一个流中读取并将其写入另一个流(在.NET 中)。通常这样做是为了对流应用变换并继续移动它。

在这种情况下,我正在加载文件,将其放入 deflate 流并将其写入文件(为简单起见,删除了错误处理):

编辑:

.NET 4.0 现在有一个 Stream.CopyTo 函数,哈利路亚

0 投票
1 回答
2072 浏览

c++ - 如何发现/控制 C++ fstream 中的内部缓冲级别?

假设我这样做(一个人为的例子):

我假设(希望)iostream 库在这里做了一些内部缓冲,并且不会在操作系统级别将其变成无数的单字节文件读取操作。

有没有办法:

a)找出 ifstream 内部缓冲区的大小?

b)改变 ifstream 内部缓冲区的大小?

我正在编写一个文件过滤器,它需要以小块读取数 GB 的文件,我想尝试不同的缓冲区大小,看看它是否会影响性能。

0 投票
3 回答
7033 浏览

c++ - std::ifstream::open() 不工作

我正在开发一款游戏的原型,并且某些游戏规则将在 ini 文件中定义,以便游戏设计师可以调整游戏参数而无需我的帮助,除了重新编译。这就是我目前正在做的事情:

但是,我的流从未成功打开。在调试期间深入研究 STL 源代码会发现 _getstream()(如 stream.c 中定义的)不断返回 NULL,但我就是不知道为什么会这样。帮助,有人吗?

编辑:Rules.ini 与 .exe 文件位于同一目录中。

0 投票
6 回答
55963 浏览

c++ - 从 std::cout 或 std::ofstream(file) 获取 std::ostream

如何根据特定的程序条件将 a 绑定std::ostream到其中一个std::cout或一个对象?std::ofstream尽管由于许多原因这无效,但我想实现在语义上等同于以下内容的东西:

我见过一些不是异常安全的示例,例如来自http://www2.roguewave.com/support/docs/sourcepro/edition9/html/stdlibug/34-2.html的示例:

有谁知道更好的,异常安全的解决方案?

0 投票
3 回答
435 浏览

java - 为什么 System.out/err 在 Java 中实现为字节流?

我在 Sun 的命令行 I/O 上查看了本教程。它指出:

您可能期望标准流是字符流,但由于历史原因,它们是字节流。System.out 和 System.err 被定义为 PrintStream 对象。虽然它在技术上是字节流,但 PrintStream 使用内部字符流对象来模拟字符流的许多特性。

有谁知道“历史原因”是什么?