对STDOUT_FILENO和STDIN_FILENO的理解

 1 #include<unistd.h>
 2 #define SIZE 100
 3  
 4 int main(void)
 5 {
 6         int n;
 7         char buf[SIZE];
 8  
 9         while(n=read(STDIN_FILENO,buf,SIZE))
10         {
11                 if(n!=write(STDOUT_FILENO,buf,n))
12                         perror("write error");
13         }
14 
15         if(n<0) perror("read error"); 
16 
17         return 0;
18 }

如果按照常规的使用方法:

fan@fan:~/arm$ gcc -o app stdout.c 
fan@fan:~/arm$ ./app
fdfe
fdfe
fefefef
fefefef
//输入一行,马上输出一行,也就是按照原样输出
===========================================================================
使用重定向来运行
fan@fan:~/arm$ ./app> data
fefe
fdadfdf
adfdfef
//输入的字符串并不是输出到终端,而是输出到data文件中。
==========================================================================
fan@fan:~/arm$ ./app <stdout.c >data
fan@fan:~/arm$ 
//这一句相当于把stdout.c复制到data中去
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++=
STDOUT_FILENO和STDIN_FILENO在默认的情况下是终端,
使用ctrl+D来输入文件结束符
原文地址:https://www.cnblogs.com/Robotke1/p/3040403.html