freopen (stdin stdout) 상세 설명 + 인 스 턴 스
한 바퀴 돌 고................................................................
이해 가 안 되면 천천히 생각해!알 수 있 을 거 야. 자세히 보면... 다 말 해 줄 거 야...
인터넷 에서 이 물건 은 좀 찾기 어렵다.
코드:
감사합니다! $~ y + M (v + C $g $l; U: x 'i! \' j% c '@ 2' / M 은 '/ dev / console' 을 '/ dev / tty' 로 바 꾸 면 됩 니 다. 'f7 a8 u * z1 e' k & {- \ 7 u9 h) N * D 'K5 v, l / dev / console 은 시스템 콘 솔 을 대표 합 니 다. 모든 LINUX 시스템 은 콘 솔 메 시 지 를 수신 하 는 전문 단말기 나 디 스 플레이 가 있 습 니 다. 보통' 활약 '입 니 다.가상 콘 솔 입 니 다. X Windows 시스템 에 서 는 화면 에 있 는 특수 한 콘 솔 창 입 니 다. ]2 w, m) A. x) G3 I a! q. t; R 3 t 'g. S2 [8 N7 F 특수 파일 / dev / tty 는 프로 세 스 제어 단말기 (키보드 와 디 스 플레이 또는 키보드 와 창) 의 별명 (논리 장치) 입 니 다.- 이 프로그램 에 제어 단말기 가 있다 면. / dev / tty 는 사용자 가 구체 적 으로 사용 하 는 가짜 단말 기 를 사용자 에 게 직접 출력 할 수 있 도록 합 니 다. 표준 출력 이 재 설정 되 어 있 는 상황 에서 이 기능 은 매우 유용 합 니 다. - n]% \ 6 d. s9 E A1 @ (e & f3 R8 i9 B1 P8 O / dev / console 장 치 는 하나 뿐 이지 만 / dev / tty 를 통 해 가능 한 물리 장 치 는 셀 수 없 이 많다.
freopen 이후 표준 핸들 을 어떻게 복구 합 니까?
By skywind
보통 freopen 을 사용 하여 입력 / 출력 을 파일 로 바 꿀 수 있 습 니 다. 예 를 들 어 [CPP] freopen ("in. txt", "r", stdin), freopen ("out. txt", "w", stdin), [/ CPP]
그러나 표준 핸들 을 나중에 복구 할 수 있 는 완전히 호 환 되 는 솔 루 션 은 존재 하지 않 습 니 다. C 표준 라 이브 러 리 에 서 는 어 쩔 수 없습니다. 표준 콘 솔 장치 파일 을 다시 여 는 방식 이 생각 나 기 쉽 지만 안 타 깝 게 도 이 장치 파일 의 이름 은 운영 체제 와 관련 이 있 습 니 다.
C + + 의 스 트림 라 이브 러 리 를 사용 하면 free open 효 과 를 얻 을 수 있 고 쉽게 회복 할 수 있 습 니 다. 스 트림 을 사용 하 는 rdbuf 입 니 다. 예 를 들 어:
[CPP] ofstream outf(”out.txt”); streambuf *strm_buf = cout.rdbuf(); cout.rdbuf(outf.rdbuf()); cout << “write something to file”; cout.rdbuf(strm_buf); //recover cout << “display something on screen”; [/CPP]
= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =). == NULL) fprintf(stderr, "error redirectingstdout"); /* this output will go to a file */ printf("This will go into a file."); /* close the standard output stream */ fclose(stdout); return 0; }= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = 현재 주요 캐 시 특징 은 stdin 과 stdout 은 줄 캐 시 이 고 stderr 는 캐 시 되 지 않 습 니 다. stdout 시 파일 을 C 프로그램 에서 다시 설정 한 다음 원본 stdout 과 같은 프로그램의 더 높 은 위 치 를 복원 하 는 방법 을 소개 합 니 다. C 함 수 는 보통 stdout 이나 stdin 을 free open () 으로 재 설정 하 는 데 사 용 됩 니 다.. stdout 을 파일 이름 FILE. TXT 로 변경 하려 면 다음 호출 을 사용 하 십시오.
freopen( "file.txt", "w", stdout ); // "file.txt"
이 문 구 는 모든 후속 출력 을 파일 FILE. TXT stdout 으로 이동 합 니 다. 기본 stdout 을 표시 하 는 stdout 으로 돌아 가 려 면 다음 호출 을 사용 하 십시오.
freopen( "CON", "w", stdout ); // "CON"
이 두 가지 상황 에서 free open () 을 검사 하여 실제 발생 하 는 반환 값 을 확인 합 니 다. 다음은 짧 은 프로그램 이 stdout 시 방향 을 바 꾸 는 것 을 보 여 줍 니 다.
실행 코드
[color=blue]-(dearvoid@LinuxEden:tty3)-(~/tmp)-
[26047 0] #[/color] cat freopen.c
#include <stdio.h>
#include <unistd.h>
int
main()
{
FILE *fp;
char buf[1024];
char tty[32];
ttyname_r(fileno(stdin), tty, sizeof(tty));
fp = freopen("./freopen.c", "r", stdin);
fgets(buf, sizeof(buf), stdin);
printf("%s", buf);
fp = freopen(tty, "r", stdin);
fgets(buf, sizeof(buf), stdin);
printf("%s", buf);
return 0;
}
[color=blue]-(dearvoid@LinuxEden:tty3)-(~/tmp)-
[26047 0] #[/color] gcc freopen.c
[color=blue]-(dearvoid@LinuxEden:tty3)-(~/tmp)-
[26047 0] #[/color] ./a.out
#include <stdio.h>
This line is inputed by me.
This line is inputed by me.
[color=blue]-(dearvoid@LinuxEden:tty3)-(~/tmp)-
[26047 0] #[/color] o
// Compile options needed: none
#include <stdio.h>
#include <stdlib.h>void main(void)
{
FILE *stream ;
// file.txt,
"W" ("r" )
if((stream = freopen("file.txt", "w", stdout)) == NULL)
exit(-1);
printf("this is stdout output
");
stream = freopen("CON", "w", stdout);stdout
printf("And now back to the console once again
");
}
"CON" DOS .
==========================================
:
#include <stdio.h>
#include <stdlib.h>
void main(void)
{
FILE *stream ;
char s[102400]="";
if((stream = freopen("file.txt", "r", stdin)) == NULL) // ( stdin , stdin . buf)
exit(-1);
fread(s, 1, 1024, stdin); // . stdin .
printf("%s
", s); // .
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.