#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