当前位置:   article > 正文

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

stdout_fileno

目录

前言

一、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.文件描述符的使用

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

  1. void unix_1_4_read_write_copy(void)
  2. {
  3.     int n;
  4.     char buf[BUFFSIZE];
  5.     while((n=read(STDIN_FILENO,buf,BUFFSIZE)) > 0){
  6.         if(write(STDOUT_FILENO,buf,n) != n)
  7.             err_sys("write error");
  8.     }
  9.     if(n<0)
  10.         err_sys("read error");
  11.     exit(0);
  12. }

2.流的使用

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

  1. void unix_1_5_getc_puts_copy(void)
  2. {
  3.     int c;
  4.     while((c=getc(stdin))!=EOF)
  5.         if(putc(c,stdout) == EOF)
  6.             err_sys("output error");
  7.     if(ferror(stdin))
  8.         err_sys("input error");
  9.     exit(0);
  10. }

 

3.代码标记

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


总结

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/462629
推荐阅读
  

闽ICP备14008679号