UNIX环境高级编程笔记(2)- STDIN_FILENO、STDOUT_FILENO和stdin、stdout的区别

目录

前言

一、STDIN_FILENO、STDOUT_FILENO介绍

二、stdin、stdout介绍

三、代码例程

1.文件描述符的使用

2.流的使用

3.代码标记

总结


  •  

 


前言

本章主要通过UNIX高级编程中的两个例子来说明STDIN_FILENO、STDOUT_FILENO和stdin、stdout的区别,以及简要说明不带缓冲的I/O和标准I/O。


 

一、STDIN_FILENO、STDOUT_FILENO介绍

两个常量STDIN_FILENO、STDOUT_FILENO定义在<unistd.h>头文件中,类型为int,属于系统API接口库,它们指定了标准输入和标准输出的文件描述符。在POSIX中,它们的值分别是0和1,但是考虑到可读性,我们使用这些名字来表示这些常量。定义为:

#define STDIN_FILENO 0 /* Standard input. */

#define STDOUT_FILENO 1 /* Standard output. */

#define STDERR_FILENO 2 /* Standard error output. */

通常使用在read、write、close、open等。

二、stdin、stdout介绍

标准I/O常量stdin和stdout定义在<stdio.h>中,类型为FILE*,它们分别表示标准输入和标准输出,属于标准处理的输入输出流,通常使用在fopen、fclose、fread、fwite等。

三、代码例程

1.文件描述符的使用

将标准输入复制到标准输出 代码如下(示例):

void unix_1_4_read_write_copy(void)
{
    int n;
    char buf[BUFFSIZE];
    while((n=read(STDIN_FILENO,buf,BUFFSIZE)) > 0){
        if(write(STDOUT_FILENO,buf,n) != n)
            err_sys("write error");
    }
    if(n<0)
        err_sys("read error");

    exit(0);
}

2.流的使用

用标准I/O将标准输入复制到标准输出 代码如下(示例):

void unix_1_5_getc_puts_copy(void)
{
    int c;
    while((c=getc(stdin))!=EOF)
        if(putc(c,stdout) == EOF)
            err_sys("output error");

    if(ferror(stdin))
        err_sys("input error");

    exit(0);
}

 

3.代码标记

getc函数读到最后一个字节时,getc返回常量EOF,代表结束。


总结

本文章主要简单STDIN_FILENO、STDOUT_FILENO和stdin、stdout的区别,也就是不带缓冲I/O和标准I/0的区别,并用了linux下的两个实例提供参考。

  • 7
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

默默的赶路人

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

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

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

打赏作者

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

抵扣说明:

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

余额充值