不带缓冲的IO的标准输入到标准输出
2014-11-26 19:15
218 查看
在POSIX标准中提供了函数open, read, write, lseek以及close提供不带缓冲的IO,这些函数都是使用文件描述符;
在Linux/Unix系统中将标准输入复制到标准输出简单实现如下:
解析:
头文件#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也在改头文件中定义,他们分别表示标准输入和标准输出;
在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之转换流与重定向标准输入/输出
- C++重载输入和输出操作符以及IO标准库中的刷新输入缓冲区残留字符问题
- 黑马程序员——第19天——IO输入与输出(缓冲字符流,字节流,缓冲字节流,字符流、字节流总结)
- 标准输入,标准输出和标准出错的缓冲
- 文件IO详解(四)---标准输入、标准输出和标准错误
- C++重载输入和输出操作符以及IO标准库中的刷新输入缓冲区残留字符问题
- 8-v4l2——basic frame IO 基本的帧缓冲IO 输入输出
- 文件IO 从键盘输入(标准输入),标准输出。可以输入汉字..strncmp 比较字符串..BUFSIZ
- 文件IO---标准输入、标准输出和标准错误
- io学习:标准输入、标准输出、标准出错
- 重学C++Primer笔记7---标准IO库中输入输出流控制
- 标准输入,标准输出,标准错误输出缓冲问题
- java.io.Console的使用以及重定向标准输出/输入
- C++重载输入和输出操作符以及IO标准库中的刷新输入缓冲区残留字符问题
- 标准IO之格式化输入和输出
- 初学Java,IO之重定向标准输入\输出(四十五)
- Linux基础之标准输入和输出
- 第7讲 IO/输入与输出-Decorator涉及模式
- 标准输入、标准输出究竟是什么? .
- IO操作 改变标准输入输出流和转换流练习