freopen
-stdout
뒤에 어떻게 터미널에 인쇄 할 수 있습니까?freopen을 사용한 후 stdout에 쓰는 방법
freopen("out", "w", stdout); // reopen stdout
/* something */
printf("Now I want to print this on terminal");
freopen
-stdout
뒤에 어떻게 터미널에 인쇄 할 수 있습니까?freopen을 사용한 후 stdout에 쓰는 방법
freopen("out", "w", stdout); // reopen stdout
/* something */
printf("Now I want to print this on terminal");
당신은 그것으로 수행 할 수 있습니다
#include <fstream>
ofstream out("out.txt");
out<<"something";
then
cout<<"something";
질문에 대답하지 않는다 – SHR
@SHR :이 질문을하는 사람이 대답하고 있다고 말하면 그에게 도움이 될 수 있습니다. –
@darkdream 당신은 환영합니다 :) –
나는 이것이 당신이 찾고있는 생각 :
는Once I've used freopen, how can I get the original stdout (or stdin) back?
에는 휴대용 솔루션 없습니다. 그러나이 링크는 또한 대부분의 POSIX 시스템에서 작동 할 수있는 자신의 스트림과 non-portable 솔루션을 사용하여 가능한 솔루션을 설명합니다.
좋은 방법은 아닙니다. 다시 전환해야하는 경우 가장 좋은 해결책은 입니다. 처음에는 freopen을 사용하지 않아야합니다. 자신의 명시 적 출력 (또는 입력) 스트림 변수를 사용해보십시오. 에서 다시 할당 할 수 있으며 원본 stdout (또는 stdin)은 그대로 유지합니다. 예를 들어, 글로벌
FILE *ofp;
을 선언하고는 fprintf (OFP, ...)와 (...) printf와 모든 통화를 대체합니다. (분명히 putchar 및 puts에 대한 호출도 확인해야합니다.) 그러면 ofp를 stdout 또는 다른 것으로 설정할 수 있습니다.
나중에이 같은
stdout = savestdout; /* WRONG */
하지만 코드를 수행하여
FILE *savestdout = stdout; stdout = fopen(file, "w"); /* WRONG */
은 표준 출력을 복원 할 자신이 할 수 떠나 같은 것을 을 완전히 freopen을 건너 뛰고 할 수 있다면 당신은 궁금 할 것이다는 가능성이 없습니다 stdout (및 stdin 및 stderr)은 일반적으로 재 할당 할 수없는 상수이기 때문에 ( 은 freopen이 처음 존재하는 이유이기 때문에).
그것은 가능할 수있는 이식성 방법으로, 그 자리에 어떤 파일을 열 freopen을 호출하기 전에 스트림에 대한 정보 를 멀리 저장 원래의 스트림이 나중에 복원 할 수 있도록. 은 을 사용할 수있는 경우 dup 또는 dup2와 같은 시스템 관련 호출을 사용하여 기본 파일 설명자를 조작하는 것이 가장 간단하고 신뢰할 수있는 방법입니다. 다른 하나는 FILE 구조체의 내용을 복사하거나 검사하는 것이지만, 이식성이 떨어지며 신뢰할 수 없습니다.
일부 시스템에서, 당신은 특별한 장치 파일 을 다시 할 수있을 여전히 (예를 들어) 원래 표준 출력에 연결 (예 : 유닉스의 현대 버전에서 DEV/FD/1 /로). 일부 시스템에서는 명시 적으로 제어 터미널을 다시 열 수 있지만 은 원래 입력 또는 출력 (즉, freopen을 호출하기 전의 stdin 또는 stdout)이 일 수 있기 때문에 원하는 것일 필요는 없습니다. 명령 줄에서 리디렉션되었습니다.
@SotiriosDelimanolis 나는 c-faq.com이 사라질 것이라고 생각하지 못했습니다. 하지만 어쨌든, :) –
코드는 영어보다 이해하기 쉽습니다. 게시해야합니다. – anatolyg
어떤 OS 에서요? 나는 Windows가 반드시이 작업을 허용하지 않는다고 믿습니다 ... –
@MatsPetersson on the 우분투 – cijianzy