标准输入输出重定向
转自: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";
}