출처 : http://grampus.tistory.com/
윈도우 어플리케이션을 개발할때 필요에 의해서 콘솔 윈도우를 생성해야 할 때 경우가 있다.
콘솔 윈도우 생성하는 방법 및 표준 입/출력 설정을 통해 윈도우 어플리케이션에서도 C언어에서 제공하는
표준 입/출력 함수를 사용해서 입출력을 해보도록 한다.
콘솔 윈도우 생성 및 해제
콘솔 윈도우의 생성 및 해제는 각 함수 호출 한번씩으로 생성 및 해제를 할 수 있다.
// 콘솔 생성
if( !AllocConsole() )
return ERROR;
...생략...
// 종료 전 콘솔 할당 해제
FreeConsole();
- // 콘솔 생성
if( !AllocConsole() )
return ERROR;
…생략…
- // 종료 전 콘솔 할당 해제
FreeConsole();
표준 입/출력 핸들 설정
입/ 출력에 대한 핸들은 _open_osfhandle()함수를 통해서 인자로 넘겨준 OS의 File Handle과 연관된 C run-time file descriptor를 얻어 Open후 stdout, stdin에 각각 설정을 해주면 된다. 아래의 코드를 참고 하자.
- int hCrt, i;
FILE *hf;
- // 표준 출력에 대한 File Descriptor를 얻어옴
hCrt = _open_osfhandle((long) GetStdHandle(STD_OUTPUT_HANDLE), _O_TEXT);
- // File Handle Open
- hf = _fdopen( hCrt, “w” );
*stdout = *hf;
- // Buffer관련 설정
i = setvbuf( stdout, NULL, _IONBF, 0 );
- // Test Code
- puts(“HelloWorld”);
int hCrt, i;
FILE *hf;
// 표준 출력에 대한 File Descriptor를 얻어옴
hCrt = _open_osfhandle((long) GetStdHandle(STD_OUTPUT_HANDLE), _O_TEXT);
// File Handle Open
hf = _fdopen( hCrt, "w" );
*stdout = *hf;
// Buffer관련 설정
i = setvbuf( stdout, NULL, _IONBF, 0 );
// Test Code
puts("HelloWorld");
int hCrt, i;
FILE *hf;
// 표준 입력에 대한 File Descriptor르 얻음
hCrt = _open_osfhandle((long) GetStdHandle(STD_INPUT_HANDLE), _O_TEXT);
// File Handle Open
hf = _fdopen( hCrt, "r" );
*stdin = *hf;
// Buffer 관련 설정
i = setvbuf( stdin, NULL, _IONBF, 0 );
// Test Code
printf("Input number:");
scanf("%d", &i);
printf("Input number is %d\n", i);