- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个 Java 应用程序,它通过 JNI 调用用 C++ 编写的 DLL,然后这个 DLL 动态加载另一个 DLL。在某些情况下,以某种方式在 C++ 中写入 cerr 的消息会出现在 Java 部分的 Stdout-Stream 中的某些计算机上。在 C++ 部分和 Java 部分中都没有任何标准流(cerr、cout、Stdout、Sterr 等)的显式重定向。
这怎么会发生?如何确保 C++ 层的 cerr-stream 最终进入 Java 层的 Stderr-stream?
JVM 在所有情况下都是相同的,
JRE 版本:6.0_27-b07,Java VM:Java HotSpot(TM) Client VM(20.2-b06 混合模式 windows-x86)
最佳答案
要直接回答您的问题,std::cerr 只能在共享相同描述符的情况下出现在 System.out 中。
如果它确实发生在某些计算机上而不是其他计算机上,我怀疑默认 System.out 和 System.err 的 Java 实现存在差异。您没有指出相同的 Java 安装,只是不同的计算机。 Java 不保证其默认输出流实现。
现在,由于两边的缓冲和文件描述符不协调,只有两种可能:
1) 您可以访问 DLL 源代码并可以更改所有 I/O 以利用您传入的 System.out/err Java 流。
2) 你不知道。在这一点上,即使你显然通过合作冲洗成功了,你也无法证明你的 hack 似乎有效的实验证据之外的正确性。实验很可能不会发现缓冲区恰好已满、空或共享相同文件描述符的极端情况。
希望你能选择#1。
关于java - cerr (c++) 怎么会出现在 Stdout (Java) 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12730518/
我写了一个函数,它从命令行获取两个数字并将其相乘,如果 argc 不是 3,它应该输出一个 cerr 行;但是它不起作用。我做错了什么吗? #include #include using name
我有一些问题,我收到了这些错误(在代码中标记): 标识符“cerr”未定义 没有运算符“ using namespace std; int main() { ofstream output("
在下面描述的情况下使用 cerr 是否有良好的风格? try { cout << a + b; } catch(const IntException& e) {
假设我们有一个包含 20 个模块的 30 K 行代码数据库:即每个 *.cpp 和 *.h 文件。在开发过程中,源代码装饰有通过 cerr 查找的局部变量。有时它与 gdb 一样具有优势,有时则不然。
我有以下代码。这段代码的作用是合并两个排序的链表,然后删除两个链表并返回一个新列表: #include using namespace std; class node { public:
我得到了一个包含很多std::cerr的程序,它直接输出到我的终端。我想知道 std::cerr 和 std::cout 之间有什么区别。以及如何禁用 std::cerr(我不希望它输出到我的屏幕)?
extern ostream cout; extern ostream cerr; extern ostream clog; cout、cerr 和 clog 被声明为 ostream 的类型。但是
我正在使用的软件库将大量调试输出写入 std::cerr,但如果我告诉它安静,则将该输出重定向到空流。这是一个简化的 main.cpp,显示代码如何尝试实现此目的: #include #includ
我正在调试一个大型应用程序,我想在将某个字符串写入 std::cerr 之前中断。 .我有办法做到这一点吗? 代码中有很多地方写了这个字符串。 字符串并不总是这样的形式 std::cerr #inc
我在 C++ 中遇到输出问题。我有一个调用另一个函数 B 的函数 A。在函数 B 中出现错误时,我使用 cerr 打印一条错误消息。在函数 A 中,在调用 B 之后,我使用 cout 打印了一些行。
我想知道如何以及在何处可以在 C++ 中使用“cerr”? 最佳答案 无处不在 #include 和 使用std::命名空间 关于c++ - 我想知道如何以及在何处可以在 C++ 中使用 "cerr"
在不使用成熟的日志记录库(或 IF 语句)的情况下 - 在 C++ 中是否有办法有时将消息打印到控制台,有时不打印? 我正在使用 std::cerr,有没有办法控制何时输出或不输出? 理想情况下我可以
我想将 std::cerr 和 std::cout 的输出重定向到文件。为此,我在下面的代码示例中使用了 rdbuf 函数。不幸的是,我收到了异常 Exception thrown: read acc
在试图弄清楚如何回答 https://stackoverflow.com/questions/33601384/what-is-the-file-descriptor-of-linuxs-enviro
我遇到了一段基本上执行以下操作的代码: #include using namespace std; int main() { cout }’ and ‘std::ostream {aka s
给定: MY_CLASS* ptr = MY_CLASS::GetSomeInstance(); 将 ptr 输出到 std::cerr 的正确方法是什么,以便我可以记录它的值?注意我不想写类,只写地
我为进度条写了一个标题。它包含以下功能: /** * @brief advances the progress bar every time an interval of x * f
它们之间有什么区别以及它们是如何使用的?谁能指点我的例子? 具体来说,在这两种情况下,您如何“写入”到流中,以及如何恢复和输出(即到屏幕上)已写入其中的文本? 另外,“屏幕”输出本身就是一个流,对吧?
这里的一个相关问题展示了如何只用木屐来做到这一点: How to redefine clog to tee to original clog and a log file? 现在的问题是如何同时为 c
我想更好地学习 C++(目前我的 C++ 仅限于它的 C 子集 *咳* ...),因此我决定尝试“C++ -ify”我的一个有用的日志记录功能,从 C 到 C++,这(我认为)最好用代码解释: #in
我是一名优秀的程序员,十分优秀!