标准输入复制到标准输出

#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>

#define BUFFSIZE 4096

int main(void)
{
        int n;
        char buf[BUFFSIZE];
        while ((n = read(STDIN_FILENO, buf, BUFFSIZE)) > 0)
                if (write(STDOUT_FILENO, buf, n) != n)
                        printf("write error\n"); exit(1);
        if (n < 0)
                printf("write error\n");

        exit(0);
}

 

运行结果
[lingh@test advanced_unix]$ in2out
rrrrrrrrrrrrrrrrrrrrrrr
rrrrrrrrrrrrrrrrrrrrrrr
rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr

 

 

知识点:

read()  write()  STDIN_FILENO STDOUT_FILENO   在头文件unistd.h中

read 返回读得字节数 到达文件尾端 read返回0, 发生错误返回-1

open read write lseek close 提供了不用缓存的IO,这些函数都使用文件描述符

STDIN_FILENO是文件描述符,与stdin的差别, stdin是FILE* 类型的在头文件stdio.h中

stdio.h 写道
extern struct _IO_FILE *stdin; /* Standard input stream. */
extern struct _IO_FILE *stdout; /* Standard output stream. */
extern struct _IO_FILE *stderr; /* Standard error output stream. */

 

 

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
        int c;
        while ((c = getc(stdin)) != EOF)
                if (putc(c, stdout) == EOF)
                        printf("output error\n"); exit(1);
        if (ferror(stdin))
                printf("input error\n");
        exit(0);
}

 

 运行结果:

[lingh@test advanced_unix]$ gcc -o getc2putc getc2putc.c
[lingh@test advanced_unix]$ getc2putc
3333333333333333
3333333333333333
5555555555555555555
5555555555555555555
^C

 

 知识点

1. stdin stdout EOF  getc  putc  ferror 在stdio.h中

#ifndef EOF
# define EOF (-1)
#endif

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值