프로그램에 두 줄의 함수 호출만 추가하여
std i/o를  redirection하는 함수를 만들려다..
결국 만들었습니다!!
아..재밌는데 더 하긴 귀찮네요.

// redirection_out.cc
// redirection out을 간단히 사용하기 위한 함수를 정의

#include <fcntl.h>
#include <sys/io.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <string.h>
#include <sys/wait.h>

int redirect_original_stdout;
FILE * redirect_stream;

int redirect_stdout_to_file( char * fname, int append=0 )
{
    // stdout을 screen에서 file로 대체하는 함수
   
    // 1. 파일 열기(open)
    // 2. stdout의 descriptor 백업(dup)
    // 3. stdout을 file로 대체(dup2)
    // 4. 파일 닫기(close)
   
   
    int result;
    char openflag[5];
   
    if( append )
        strcpy( openflag, "a" );
    else
        strcpy( openflag, "w+" );

    redirect_stream = fopen( fname, openflag );
    if( redirect_stream==NULL )
        return -1;
   
    if( append )
        fseek( redirect_stream, 0, SEEK_END );           
   
    redirect_original_stdout = dup( STDOUT_FILENO );
    if( redirect_original_stdout<0 )
        return -1;
   
    result = dup2( fileno( redirect_stream ), STDOUT_FILENO );
    if( result<0 )
        return -1;
   
    result = fclose( redirect_stream );
    if( result!=0 )
        return -1;
   
    return 0;
}

int redirect_stdout_restore()
{
    // stdout을 file에서 screen으로 복구하는 함수
   
    // 1. 버퍼에 있는 데이터들 모두 처리(fflush)
    // 2. stdout (파일) 닫기
    // 3. 백업한 stdout의 descriptor을 이용해 stdout을 화면으로 복구(dup2)
   
    int result;
   
    fflush( stdout );    // 이거없음 곤란한 경우 가끔 발생
           
    result = close( STDOUT_FILENO );
    if( result<0 )
        return -1;

    result = dup2( redirect_original_stdout, STDOUT_FILENO );   
    if( result<0 )
        return -1;
       
    return 0;
}

int main(int argc, char **argv)
{
    int result;
    int appendmode;
   
    if( argc==2 && atoi(argv[1])==1 )
        appendmode = 1;
    else
        appendmode = 0;

    // 예제 1
    // stdout으로의 출력을 file로-
    result = redirect_stdout_to_file( "output.txt", appendmode );
    if( result<0 )
    {
        printf("redirect_stdout_to_file error\n");
        return 0;
    }
   
    // 파일에 쓰기 1
    printf( "this is file output 1 (buffered)\n" );
   
    // 파일에 쓰기 2
    char * msg = "this is file output 2 (direct)\n";
    write( STDOUT_FILENO, msg, strlen(msg) );
   
    result = redirect_stdout_restore();
    if( result<0 )
    {
        printf("redirect_stdout_restore error\n");
        return 0;
    }
   
    return 0;
}

Posted by 배트
,