目录
一、STDIN_FILENO、STDOUT_FILENO介绍
前言
本章主要通过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下的两个实例提供参考。