赞
踩
目录
一、STDIN_FILENO、STDOUT_FILENO介绍
本章主要通过UNIX高级编程中的两个例子来说明STDIN_FILENO、STDOUT_FILENO和stdin、stdout的区别,以及简要说明不带缓冲的I/O和标准I/O。
两个常量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等。
标准I/O常量stdin和stdout定义在<stdio.h>中,类型为FILE*,它们分别表示标准输入和标准输出,属于标准处理的输入输出流,通常使用在fopen、fclose、fread、fwite等。
将标准输入复制到标准输出 代码如下(示例):
- 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);
- }
用标准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);
- }
getc函数读到最后一个字节时,getc返回常量EOF,代表结束。
本文章主要简单STDIN_FILENO、STDOUT_FILENO和stdin、stdout的区别,也就是不带缓冲I/O和标准I/0的区别,并用了linux下的两个实例提供参考。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。