标准输入输出重定向

转自:http://blog.csdn.net/diandian82/article/details/783777

 

1. C:

#include <stdio.h>

#include <stdlib.h>

void test_stdin()

{

    char buf[128];

freopen("1.txt", "r", stdin); //redirect stdin

    scanf("%s",buf);

    printf("%s\n",buf);

    freopen("CON", "r", stdin); //recover(Windows)

//freopen("/dev/console", "r", stdin); //recover(Linux)

//freopen("/dev/pts/0", "r", stdin); //recover stdin(Linux : my putty client)

    scanf("%s",buf);

    printf("%s\n",buf);

}

void test_stdout()

{

    freopen("1.txt", "w", stdout); //redirect stdout

    printf("test");

    freopen("CON", "w", stdout); //recover stdout(Windows)

//freopen("/dev/console", "w", stdout); //recover stdout(Linux)

//freopen("/dev/pts/0", "w", stdout); //recover stdout(Linux : my putty client)

    printf("OK\n");

}

int main()

{

    printf("Test stdout : \n");

    test_stdout();

    printf("Test stdin : \n");

    test_stdin();

    return 0;

}

 

2.Python:

#! /usr/bin/python

import sys

'''

  File : redirect.py

  Author : Mike

  E-Mail : Mike_Zhang@live.com

'''

print "Test stdout : "

#redirect stdout

tmp = sys.stdout

fp = open("1.txt","w")

sys.stdout = fp

print 'Just a test'

sys.stdout = tmp #recover stdout

print 'test2'

fp.close()

print "Test stdin : "

#redirect stdin

tmp = sys.stdin

fp = open("1.txt","r")

sys.stdin = fp

strTest = raw_input()

print strTest

sys.stdin = tmp # recover stdin

strTest = raw_input()

print strTest

fp.close()

 

3. C++:

#include <iostream>

#include <fstream>

void main()

{

    std::ofstream logFile("c://out.txt");

    std::streambuf *outbuf = std::cout.rdbuf(logFile.rdbuf());

    std::streambuf *errbuf = std::cerr.rdbuf(logFile.rdbuf());

    // do the actual work of the program;

    // GUI code and event loop would go here

    std::cout << "This would normally go to cout but goes to the log file/n";

    std::cerr << "This would normally go to cerr but goes to the log file /n";

    logFile << "This goes to the log file/n";

    // end of program body

    // restore the buffers

    std::cout.rdbuf(outbuf);

    std::cerr.rdbuf(errbuf);

    // It will output in your console

    std::cout << "This would normally go to cout but goes to the log file/n";

    std::cerr << "This would normally go to cerr but goes to the log file /n";

}

posted on 2014-10-29 15:06  qinfengxiaoyue  阅读(550)  评论(0编辑  收藏  举报