六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 60|回复: 0

对stdin,stdout 和 STDOUT_FILENO,STDIN_FILENO的学习

[复制链接]

升级  16.67%

21

主题

21

主题

21

主题

秀才

Rank: 2

积分
75
 楼主| 发表于 2013-1-19 04:07:47 | 显示全部楼层 |阅读模式
在unix系统调用中,标准输入 描述字用stdin,标准输出用stdout,标准出错用stderr表示,但在一些调用函数,引用了STDIN_FILENO表示标准输入才,同样,标准出入用STDOUT_FILENO,标准出错用STDERR_FILENO.他们的区别: stdin等是FILE *类型,属于标 准I/O,在<stdio.h>。STDIN_FILENO等是文件描述 符,是非负整数,一般定义为0, 1, 2,属于没有buffer的I/O,直接调用系统调用,在<unistd.h>。下面一个例子是对 STDOUT_FIFENO 和STDIN_FILENO的应用:#include<unistd.h> #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.cfan@fan:~/arm$ ./app fdfe fdfe fefefef fefefef //输入一行,马上输出一行, 也就是按照原样输出========================= ==================================================使用重定向来运行 fan@fan:~/arm$ ./app> data fefe fdadfdf adfdfef //输入的字符串并不是输出到 终端,而是输出到data文件中。========================= =================================================fan@fan:~/arm$ ./app <stdout.c >datafan@fan:~/arm$ //这一句相当于把stdout.c复 制到data中去+++++++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++=STDOUT_FILENO和STDIN_FILENO 在默认的情况下是终端,使用ctrl+D来输入文件结束符

STDOUT_FILENO是标准输出的 文件描述符,int类型。stdout是标准输出流,FILE *类 型,注意是小写。
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表