Chinaunix首页 | 论坛 | 博客
  • 博客访问: 119080
  • 博文数量: 29
  • 博客积分: 1215
  • 博客等级: 中尉
  • 技术积分: 305
  • 用 户 组: 普通用户
  • 注册时间: 2010-12-05 16:29
文章分类
文章存档

2010年(29)

我的朋友

分类: C/C++

2010-12-05 21:16:29

预备知识:
1.  #include

    ssize_t read(int fd, void *buf, size_t count);

    read()  attempts to read up to count bytes from file descriptor fd into the buffer starting at       buf.

2.  #include

    ssize_t write(int fd, const void *buf, size_t count);

    write()  writes  up  to  count bytes from the buffer pointed buf to the file referred to by the     file descriptor fd.
3.很多应用程序假定标准输入是文件描述符0,标准输出是文件描述符1。本程序则使用在中定义的两个名字:STDIN_FILENO和STDOUT_FILENO.

该程序可用于复制任一Unix普通文件。
程序清单:

#include <stdio.h> //for perror

#include <stdlib.h> //for exit

#include <unistd.h> //for read and write


#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)
        {
            perror("write error");
            exit(1);
        }
    }
    if(n < 0)
    {
        perror("read error");
        exit(1);
    }

    exit(0);
}

编译源程序:
 gcc -o cpstdintostdout cpstdintostdout.c
执行程序:
./cpstdintostdout >writed.txt
回车后等待用户终端标准输入(Ctrl+D结束,注意:千万不能用Ctrl+C,否则不能重定向到writed.txt)。
如果输出文件writed.txt并不存在,则Shell回创建它。查看writed.txt发现里面就是刚才终端输入的内容。
若以下列的方式执行程序:
./cpstdintostdout < infile > outfile 
那么名为infile的文件内容回复制到名为outfile的文件中。
当然,最普通的执行方式是这样:
./copystdintostdout
The only girl i care about has gone away.
The only girl i care about has gone away.

阅读(1534) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2010-12-07 09:58:19

很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com