stdin_to_stdout.c

来源:互联网 发布:淘宝网羊毛衫烟火726 编辑:程序博客网 时间:2024/06/06 00:24
#include <unistd.h>#include <stdio.h>#include <stdlib.h>#define BUFFSIZE 4096int 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);   //读取文件,将读取的字符放入某一个预存的缓冲区内。成功执行返回所读取数据的数量,失败返回-1fd :这是一个已经打开的文件句柄(文件描述符),表示从这个文件句柄所代表的文件读取数据。buf : 指缓冲区。读取的数据会放到这里。count : 表示每次所读取的字符数量


write函数

ssize_t write(int fd, const void *buf, size_t count);  //想打开的设备或文件中些数据。成功返回写入的字节数,出错返回-1fd :要进行写操作的文件描述符buf : 需要输出的缓冲区count : 最大输出字节计数把buf缓冲区中的数据写入到fd所代表的文件中,最大写入字节数为count

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




0 0
原创粉丝点击