stdin_to_stdout.c

#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函数中却不能这样,他必须是实际应该写入的字符数(缓冲区中读取到的字节数)。否则可能会出现越界错误。

时间: 2024-12-25 16:49:53

stdin_to_stdout.c的相关文章