stdin, stdout, stderr

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

在通常情况下,Linux/UNIX每个程序在开始运行的时刻,都会打开3个已经打开的stream. 分别用来输入,输出,打印诊断和错误信息。通常他们会被连接到用户终端。这3个句柄的类型为指向FILE的指针。可以被fprintf、fread等函数使用,他们在程序开始启动后,stdin, stdout, and stderr 的文件描述符是 0, 1和2,其它的文件描述符则排在其后。   

Linux的本质就是一切皆文件,输入输出设备也是以文件形式存在和管理的。

一、

*在linux系统调用中,标准输入描述字用stdin,标准输出用stdout,标准出错用stderr表示,但在一些调用函数,
     * 引用了STDIN_FILENO表示标准输入才,同样,标准出入用STDOUT_FILENO,标准出错用STDERR_FILENO.请问,
     * 他们有什么区别吗?stdin等是FILE *类型,属于标准I/O,在<stdio.h>。STDIN_FILENO等是文件描述符,
     * 是非负整数,一般定义为0, 1, 2,属于没有buffer的I/O,直接调用系统调用,在<unistd.h>

二、使用步骤

1.例子

代码如下(示例):

#include "stdio.h"

#include <unistd.h>

int main(int argc, char** argv)

{

    for(int i = 0; i < 5; i++)

    {

        fprintf(stdout, "This is stdout[%d]", i);

        sleep(1);

}

sleep(1);

for(int i = 0; i < 5; i++)

    {

        fprintf(stderr, "This is stderr[%d]", i);

        sleep(1);

    }

    return 0;

}

2.

(示例):

#include "stdio.h"

#include <unistd.h>

int main(int argc, char** argv)

{

    for(int i = 0; i < 5; i++)

    {

        fprintf(stdout, "This is stdout[%d]\n", i);

        sleep(1);

}

sleep(1);

for(int i = 0; i < 5; i++)

    {

        fprintf(stderr, "This is stderr[%d]\n", i);

        sleep(1);

    }

    return 0;

}

该处使用的url网络请求的数据。


总结

提示:stderr是不缓存的,stdout则进行行间缓存。接下来我们看下行间缓存的效果

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Respect@

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值