首页 > 代码库 > 不带缓冲的IO的标准输入到标准输出
不带缓冲的IO的标准输入到标准输出
在POSIX标准中提供了函数open, read, write, lseek以及close提供不带缓冲的IO,这些函数都是使用文件描述符;
在Linux/Unix系统中将标准输入复制到标准输出简单实现如下:
#include <unistd.h> #define BUFFSIZE 4096 int main(int argc, char **argv) { int n; char buf[BUFFSIZE]; while((n = read(STDIN_FILENO, buf, BUFFSIZE)) > 0) { if(write(STDOUT_FILENO, buf, n) != n) err_sys("write error"); } if(n < 0) err_sys("read error"); exit(0); }
解析:
头文件#include <unistd.h>和两个常量STDIN_FILENO, STDOUT_FILENO是POSIX标准的一部分,头文件#include <unistd.h>中包含了很多Unix系统服务的函数原型(如本例中的read和write);
两个常量STDIN_FILENO和STDOUT_FILENO定义在该头文件中,他们指定了标准输入和标准输出的文件描述符,在POSIX标准中他们的值分别是0和1.
read函数返回读取的字节数,此值用作要写的字节数。当到达输入文件的尾端时,read返回0,程序停止执行。如果发生了错误,read返回-1;
相比之下,标准I/O实现相同的功能,代码:
#include <unistd.h> int main(int argc, char **argv) { char c; while((c = getc(stdin)) != EOF) { if(putc(c, stdout) == EOF) err_sys("output error"); } if(ferror(stdin)) err_sys("input error"); exit(0); }
解析:
函数getc一次读取一个字符,然后函数putc将此字符写到标准输出。读到输入的最后一个字节时,getc返回常量EOF(该常量在头文件#include <stdio.h>中定义)。标准I/O也在改头文件中定义,他们分别表示标准输入和标准输出;
不带缓冲的IO的标准输入到标准输出
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。