笔记1-2: 将标准输入复制到标准输出

将标准输入复制到标准输出:

 

#include <apue.h>

#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\n");

    if (n < 0)

       err_sys("read error\n");

    return 0;

}

 

函数openreadwritelseekclose等提供了不用缓冲的I/O。这些函数都是使用文件描述符。文件描述符是一个非负整数,内核用它来标识进程正在访问的文件。

两个常量STDIN_FILENOSTDOUT_FILENO<unistd.h>头文件中定义,它们指定了标准输入与标准输出的文件描述符。它们的典型值分别为01.

         若以下面方式运行命令:

    ./a.out < infile > outfile

那么名为infile的文件的内容会复制到名为outfile的文件中。

 

下面程序是以标准I/O的方式实现相同功能:

 

#include <apue.h>

#include <stdio.h>

int main(int argc, char ** argv)

{

    int  c;

    while ((c = getc(stdin)) != EOF)

       if (putc(c, stdout) == EOF)

           err_sys("write error\n");

    if (ferror(stdin))

       err_sys("read error\n");

    return 0;

}

 

 

 

posted on 2013-05-21 17:28  gradliang  阅读(145)  评论(0编辑  收藏  举报

导航