您的位置:首页 > 编程语言

不带缓冲的IO的标准输入到标准输出

2014-11-26 19:15 218 查看
在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也在改头文件中定义,他们分别表示标准输入和标准输出;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Unix高级编程