1> STDOUT_FILENO、 STDIN_FILENO、 STDERR_FILENO是整型的
在/usr/include/unistd.h中有如下定义:
#defineSTDIN_FILENO
0
#defineSTDOUT_FILENO
1
#defineSTDERR_FILENO
2
2> stdin、 stdout、 stderr是FILE*类型的
在Linux手册SYNOPSIS 中可以看到如下内容:
#include
extern FILE *stdin;
extern FILE *stdout;
extern FILE *stderr;
3> fprintf函数原型为:int fprintf(FILE *stream, const char *format, ...);
可以看到第一个参数是FIEL*类型的,所以在fprintf()中要把信息输出到屏幕,第一个参数要用stdout ,不能用STDOUT_FILENO
4>STDOUT_FILENO、 STDIN_FILENO的运用
===================================================
#include
#define SIZE 100
int main(void)
{
int n;
char buf[SIZE];
while(n=read(STDIN_FILENO,buf,SIZE)) //读取标准输入到buf中,返回读取字节数。
{
if(n!=write(STDOUT_FILENO,buf,n)) 把buf 写到标准输出中
perror("write error");
}
if(n<0) perror("read error");
return 0;
}
===================================================
如果按照常规的使用方法:
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 data
fan@fan:~/arm$
//这一句相当于把stdout.c复制到data中去
===================================================
STDOUT_FILENO和STDIN_FILENO在默认的情况下是终端
本文介绍了STDOUT_FILENO、STDIN_FILENO和STDERR_FILENO作为整型常量在标准IO中的作用,以及它们与stdin、stdout、stderr之间的区别。通过示例代码展示了如何使用它们进行数据的读写操作,并通过重定向演示了它们在不同场景下的行为。
391

被折叠的 条评论
为什么被折叠?



