2013-02-11 2 views
1

나는이 질문에 스스로 대답하지 않고 전에 freopen (stdio.h에서) 함수를 사용 해왔다. 그러나 지금 나는 확신 할 수 없다.C freopen 서술자 - 수동으로 닫기/열어두기

예. 나는 표준 출력 재개했습니다

#define OUTPUT_FILE "out.txt" 
    if (freopen(OUTPUT_FILE,"w+",stdout) == NULL) 
     printf("logout can't be opened\n"); 

보통 모든 프로세스가 가지고 있으며, 표준 출력, 표준 에러 자동으로 stdin을 처리하고 우리가 그들을 폐쇄에 대해 걱정하지 않아도됩니다.
하지만 여기에 어떻게 있니? 나는 stdout을 재개했다.
다시 열면 stdout을 닫을 때 fclose를 호출해야합니까?

PS 이 처리를 수행하는 코드의 일부를 보니 나는 모든 것이 좋다고 확신 할 수 있다는 것을 듣기보다 기뻤습니다.

미리 감사드립니다.

답변

1

fclose(stdout); 리디렉션을 닫습니다.

파일 핸들을 닫으면 대개 깨끗합니다. 프로그램 종료시 파일 포인터가 열려 있으면 이 닫힙니다.

그러나 포인터를 닫으면 stdout이 다시 터미널로 리디렉션되지 않습니다.

freopen("re.txt", "w", stdout); 
printf("this is redirected stdout"); 
fclose(stdout); 

printf("this not"); 

당신은 다시 단말기에 표준 출력을 복원 할 수 있습니다 (그리고 휴식 명령 줄에서 리디렉션)로 :

freopen("/dev/tty", "a", stdout); 

당신은 dup (example)는 이전 포인터를 복원하거나하지 않는 데 사용할 수있는 freopen (http://c-faq.com/stdio/undofreopen.html)을 실행 취소하려면 freopen을 사용하십시오.