stdout 与 stderr 区别

stdout 与 stderr 区别

  • stdout 主要处理使用者输出

  • stderr 主要处理错误信息输出

  • 在默认情况下,stdout是行缓冲的,输出会放在一个buffer里面,只有到换行的时候才会输出到屏幕;

    而stderr是无缓冲的,会直接输出。

  • stdout 可以将输出重定向到某个文件上;

    stderr 不能将输出重定向,只能输出到控制台中。

重定向问题

#include <stdio.h>

int main() {
    fprintf(stdout, "from stdout\n");
    fprintf(stderr, "from stderr\n");
    return 0;
}

执行命令 gcc test.c -o test 编译生成 test.exe 文件后,执行命令行 test.exe > out.txt ,此时,控制台输出 from stderr , out.txt 文件中的内容为 from stdout

缓冲问题

#include <stdio.h>

int main() {
    fprintf(stdout, "from stdout ");
    fprintf(stderr, "from stderr ");
    puts("");
    return 0;
}

执行命令 gcc test.c -o test 编译生成 test.exe 文件后,执行命令行 ./test ,此时控制台输出 from stderr from stdout

若将上述代码 \(4、5\) 行修改为如下:

    fprintf(stdout, "from stdout\n");
    fprintf(stderr, "from stderr\n");

则控制台输出为

from stdout
from stderr

posted @ 2020-03-17 18:04  Acerkoo  阅读(724)  评论(0编辑  收藏  举报