我想知道,java stderr 标准在哪里?
我知道我可以使用 System.setErr 更改标准错误,它'重新分配“标准”错误输出流。',但我不知道哪个是“标准”。
我想详细说明我的问题:我有在 java (jni) 中使用的 C++ 库。问题是我似乎看不到来自我的 C++ 库的 stderr 输出。当我运行使用该库的 java api 时,我在 C++ 库中调用 assert() 并且在控制台中看不到输出。
我想知道,java stderr 标准在哪里?
我知道我可以使用 System.setErr 更改标准错误,它'重新分配“标准”错误输出流。',但我不知道哪个是“标准”。
我想详细说明我的问题:我有在 java (jni) 中使用的 C++ 库。问题是我似乎看不到来自我的 C++ 库的 stderr 输出。当我运行使用该库的 java api 时,我在 C++ 库中调用 assert() 并且在控制台中看不到输出。
它进入流程的标准错误流,无论设置如何。
大多数平台允许您将标准错误流重定向到其他地方(例如到文本文件)。
System.setErr 的想法是允许您不使用进程本身的标准错误流,而是对其进行更改,以便对System.err.println
etc 的调用转到给定的流。
默认情况下 System.err 是控制台,就像 System.out 一样。
调用者的文件描述符 2。它从那里去哪里——取决于调用者。在控制台上,您可以将其重定向到其他地方,例如:
java Example 2>> errors.log
我刚刚编写了一个执行 a 的小测试程序,System.err.println
它似乎会输出到控制台。
这应该去 java.io.FileDescriptor.err https://docs.oracle.com/javase/1.5.0/docs/api/java/io/FileDescriptor.html
System.setErr(new PrintStream(new BufferedOutputStream(new FileOutputStream(java.io.FileDescriptor.err),128),true));
标准错误输出流进入控制台。此流已经打开并准备好接受输出数据。
有关详细信息,请参阅java sun api。