码迷,mamicode.com
首页 > 其他好文 > 详细

stdin_to_stdout.c

时间:2015-04-26 09:19:21      阅读:97      评论:0      收藏:0      [点我收藏+]

标签:

#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>

#define BUFFSIZE 4096

int main(void)
{
	int n,m;
	char buf[BUFFSIZE] = {0};
	
	while((n = read(STDIN_FILENO, buf, BUFFSIZE)) > 0){
		if(m = write(STDOUT_FILENO, buf, BUFFSIZE) <  0){
			printf("write error\n");
			exit(1);
		}
		
		if(m < n)
		  	break;
	}
		
	if (n < 0)
	{
		printf("read error\n");
		exit (1);
	}
	
	return 0;
}


两个常量STDIN_FILENO 和 STDOUT_FILENO 定义在 <unistd.h> 头文件中,他们指定了标准输入和标准输出的文件描述符。在POSIX标准中,它们的值分别是 0 和 1 。

read 函数

ssize_t read(int fd, void *buf, size_t count);   //读取文件,将读取的字符放入某一个预存的缓冲区内。成功执行返回所读取数据的数量,失败返回-1

fd :这是一个已经打开的文件句柄(文件描述符),表示从这个文件句柄所代表的文件读取数据。
buf : 指缓冲区。读取的数据会放到这里。
count : 表示每次所读取的字符数量


write函数

ssize_t write(int fd, const void *buf, size_t count);  //想打开的设备或文件中些数据。成功返回写入的字节数,出错返回-1

fd :要进行写操作的文件描述符
buf : 需要输出的缓冲区
count : 最大输出字节计数

把buf缓冲区中的数据写入到fd所代表的文件中,最大写入字节数为count

另外需要注意的是,read函数中count的值,可以认为给定(一般要比你实际可能读到的字符数要大),而write函数中却不能这样,他必须是实际应该写入的字符数(缓冲区中读取到的字节数)。否则可能会出现越界错误。




stdin_to_stdout.c

标签:

原文地址:http://blog.csdn.net/u011641885/article/details/45280909

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!