为什么不在 stderr 上打印浮点错误消息?
Why floating point error message is not printing on stderr?
我正在运行使用java 应用程序使用java.lang.ProcessBuilder
宁c 语言代码。如果此 c 语言代码产生任何输出和错误,我可以通过 process.getInputStream()
和 process.getErrorStream()
读取它们。但在某些情况下(当退出代码 = 136 或 139 时),例如代码执行因 floating point error
而失败,我在进程的错误流中没有收到任何错误。
所以,我尝试 运行 我的 c 语言代码直接在 shell 上,并将 stderr 和 stdout 重定向到单独的文件。
Code.c
#include<stdio.h>
int main() {
int x = 1/0;
return 0;
}
命令我是运行ning:
# gcc Code.c -o Code.out -std=c99
# ./Code.out 2>err.log 1>out.log
Floating point exception (core dumped)
如您所见,上面的错误仅在 shell 上打印,但未重定向到 err.log
。此外,err.log 中什么也没有。我的问题是为什么这不是在 stderr 流中打印?根据我的理解,如果它不在 stderr 中打印,我将无法通过 process.getErrorStream 读取它。无论代码执行生成的错误消息是什么,我都想将其显示给最终用户。
正如dave_thompson_085评论的那样,Floating point exception (core dumped)
消息来自Shell而不是程序。
这是一个测试程序:
#include<stdio.h>
int main() {
fprintf(stdout, "normal output, %d\n", __LINE__);
fprintf(stderr, "error output, %d\n", __LINE__);
fflush(stdout);
fflush(stderr);
int x = 1/0;
fprintf(stdout, "normal output, %d\n", __LINE__);
fprintf(stderr, "error output, %d\n", __LINE__);
fflush(stdout);
fflush(stderr);
return 0;
}
# gcc code.c -o Code -std=c99
# ./Code 2>err.log 1>out.log
normal output, 4
error output, 5
Floating point exception (core dumped)
# cat out.log
normal output, 4
$cat err.log
error output, 5
当float异常发生时,被OS捕获并强制退出
我正在运行使用java 应用程序使用java.lang.ProcessBuilder
宁c 语言代码。如果此 c 语言代码产生任何输出和错误,我可以通过 process.getInputStream()
和 process.getErrorStream()
读取它们。但在某些情况下(当退出代码 = 136 或 139 时),例如代码执行因 floating point error
而失败,我在进程的错误流中没有收到任何错误。
所以,我尝试 运行 我的 c 语言代码直接在 shell 上,并将 stderr 和 stdout 重定向到单独的文件。
Code.c
#include<stdio.h>
int main() {
int x = 1/0;
return 0;
}
命令我是运行ning:
# gcc Code.c -o Code.out -std=c99
# ./Code.out 2>err.log 1>out.log
Floating point exception (core dumped)
如您所见,上面的错误仅在 shell 上打印,但未重定向到 err.log
。此外,err.log 中什么也没有。我的问题是为什么这不是在 stderr 流中打印?根据我的理解,如果它不在 stderr 中打印,我将无法通过 process.getErrorStream 读取它。无论代码执行生成的错误消息是什么,我都想将其显示给最终用户。
正如dave_thompson_085评论的那样,Floating point exception (core dumped)
消息来自Shell而不是程序。
这是一个测试程序:
#include<stdio.h>
int main() {
fprintf(stdout, "normal output, %d\n", __LINE__);
fprintf(stderr, "error output, %d\n", __LINE__);
fflush(stdout);
fflush(stderr);
int x = 1/0;
fprintf(stdout, "normal output, %d\n", __LINE__);
fprintf(stderr, "error output, %d\n", __LINE__);
fflush(stdout);
fflush(stderr);
return 0;
}
# gcc code.c -o Code -std=c99
# ./Code 2>err.log 1>out.log
normal output, 4
error output, 5
Floating point exception (core dumped)
# cat out.log
normal output, 4
$cat err.log
error output, 5
当float异常发生时,被OS捕获并强制退出