使用文件重定向

补充: 最近在看APUE,发现文件重定向是POSIX 系统(Unix,Linux) 的能力,而不是C++ 语言或C语言的能力

#include "apue.h"

#define BUFFSIZE  4096

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

        if (n < 0)
                printf("read error");

        exit(0);

} 

上面一段代码实现从标准输入读,并向标准输出写
编译: gcc copy.c -o copy
测试结果
一 直接执行,效果是输入什么就输出什么
./copy

1
1
2
2
3
3
4
4
5
5
6
6
7
7
8
8
dsafasdf
dsafasdf
sadfasdfasdfasdf
sadfasdfasdfasdf
sadfasdfasdfasdfasdfasdfasdfasdf
sadfasdfasdfasdfasdfasdfasdfasdf
sadfasdfsdfsdafsdfsadfasdfasdfasdfasdf
sadfasdfsdfsdafsdfsadfasdfasdfasdfasdf
asdfasdfasdfasdfsdfasdfasdfsadfsdfdsafdsafasdf
asdfasdfasdfasdfsdfasdfasdfsadfsdfdsafdsafasdf
sadfsafasdfsdfasdfasdfsadfasdfsadfsdaf
sadfsafasdfsdfasdfasdfsadfasdfsadfsdaf

二. 将输出从标准输出(shell 终端)重定向为文件,效果为将输入写到文件
jethro@ubuntu:~/CppTest$ ./copy > data
sadfasdf
sadfasdf
sadfasdf
123
456
789

然后查看data 文件,发现新建了该文件,文件的内容为刚才输入的内容

三. 将标准输入重定向到文件,效果为读取文件
jethro@ubuntu:~/CppTest$ ./copy < data
sadfasdf
sadfasdf
sadfasdf
123
456
789

四. 将输入输出都重定向到文件,效果为复制文件,cp 命令的雏形
jethro@ubuntu:~/CppTest$ ./copy < data > datanew

jethro@ubuntu:~/CppTest$ cat datanew
sadfasdf
sadfasdf
sadfasdf
123
456
789


在重新看 C++ Primer 5th 时,注意到了一个以前忽视的细节(page 19):

当你测试程序时,反复从键盘输入数据是非常乏味的。
大多数操作系统支持文件重定向,这种机制允许我们将标准输入和标准输出与命令文件管理起来:
$ addItem < infile >outfilr
以上命令会将infile 内容作为程序的输入,输入写到outfile 文件中.

测试代码:

        #include<iostream>
        using std::cin;
        using std::cout;
        int main()
        {
        int n;
        while(cin>>n)
        {
        cout  <<  n   << " ";
        }
        cout<<std::endl;

        return 0;
        }

Windows PowerShell 测试结果:

.\dailTest.exe <.\input.txt >.\output.txt
Redirection Not Surrported

Powershell 非常奇怪,当前目录非得使用.\,强制使用

Linux (ubuntu 14.4) 测试结果:

./dailyTest < input >output

Linux 支持文件重定向, cin 的内容从input 文件中读取, cout 的内容重定向到output 文件

从这个方面看,Linux 确实比windows 高效啊!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值