2011-11-21 2 views
1

stdout, stderr을 char 및 stdin 파일로 재 작성하고 싶습니다.stdout 및 stdin Redericting

int main(){ 
     stdout=fopen("/home/user/file.txt","w"); 
    printf("aaaa"); 
    printf("\nbbbb"); 
    system("/bin/bash"); 
    sprintf("stdin","exit"); 
    return 0; 
} 

파일은 콘솔에서 일부 문자열과 bash는 걸릴 인수하지 않았다 : 내 목표는 내가이 코드를 실행하면

C.

에 그것을 만들 것입니다. 어디서 버그 야?

+0

나는 당신의 질문을 이해하는데 어려움을 겪고있다.하지만 나는 당신이'bash '의 출력을 파일로 리다이렉트하고 싶다고 생각한다. 맞다. –

+0

close()를 사용하여 파일 디스크립터 (표준 입력 등)를 닫고 다른 핸들로 열 수 있습니다 ... – Macmade

답변

3

stdout에 할당하고 싶지 않습니다. 대신, 당신은 (아마도) 같은 귀하의 경우, freopen를 사용하려면 : freopen("/home/user/file.txt","w", stdout);

내부적으로 모든 처리를 수행 할 때 /, 당신은 매개 변수로 FILE *을받을 수있는 코드를 작성 오프 일반적으로 더 나은 경우, 올바른 값을 전달하십시오. 외부 코드가 stdout에 직접 쓰이면 작동하지 않습니다.

편집 : freopen과 관련된 다른 심각한 문제에 대해 언급해야합니다. 이전 스트림으로 복원하는 방법은 제공되지 않습니다. freopen을 다시 사용하고 콘솔에 쓸 경로를 알 수 있습니다 (또는 무엇이든).

1

stdout은 왼쪽 값으로 사용하지 마십시오. 원하는 효과를 얻으려면 printf() 대신 fprintf() 함수를 사용하십시오.

bash에서 stdout을 리디렉션하는 경우 /usr/bin/bash >> /home/user/file.txt으로 호출 할 수 있습니까?

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

int main(void){ 
    int ret; 
    FILE *fp; 
    int stdout_bk; 

    stdout_bk = dup(fileno(stdout)); 
    fp=fopen("/home/user/file.txt","w"); 
    dup2(fileno(fp), fileno(stdout)); 
    ret = system("/bin/bash"); 
    //flushall();//for vc 
    fflush(stdout);//for gcc 
    fclose(fp); 

    dup2(stdout_bk, fileno(stdout));//restore 

    return 0; 
} 
관련 문제