对stdin,stdout 和STDOUT_FILENO,STDIN_FILENO的学习 http://www.cnblogs.com/hoys/archive/2011/05/11/2043044
2015-09-12 15:14
501 查看
对stdin,stdout 和STDOUT_FILENO,STDIN_FILENO的学习
在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.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来输入文件结束符
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/xiaoxi2xin/archive/2010/04/24/5524769.aspx
分类: linux应用程序学习
在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.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来输入文件结束符
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/xiaoxi2xin/archive/2010/04/24/5524769.aspx
分类: linux应用程序学习
相关文章推荐
- http的内置对象 Session Application Global.aspx文件
- (5.2.2)TCP和UDP的区别(转)
- TCP三次握手、四次挥手
- 网络管理技术(二)
- ios网络编程(二)之网络连接
- linux c 检测网络状态
- HttpRequest信息内容介绍
- HTTP协议中POST、GET、HEAD、PUT等请求方法以及一些常见错误(转载)
- 关于《JavaScript DOM 编程艺术》一书中getHTTPObject.js 的一点看法
- IOS 获取网络地址的html字符串 本地获取网络图片
- HttpClient使用HttpGet进行json数据传输
- Linux下常用命令-网络命令
- 网络电视精灵2
- VMware虚拟机上网络连接(network type)的三种模式--bridged、host-only、NAT
- http://www.cnblogs.com/xia520pi/archive/2012/05/16/2504205.html
- web service中配置tcp/ip监视器
- 网络请求之——————post
- ASP.NET-自定义HttpModule与HttpHandler介绍
- php读取网络文件 curl, fsockopen ,file_get_contents 几个方法的效率对比
- ios网络编程(一)之网络请求