반응형
입력한 버퍼를 비우는 방법에 대해서는 아래 설명했다.
https://ansan-survivor.tistory.com/1322
출력버퍼를 비워주는 내장된 함수가 있는데 이름은 fflush( ) 이다.
반응형
※ fflush 함수는 Write에서만 가능(쓰기 모드). 즉, 출력버퍼를 비울때 사용가능하다.
int fflush(FILE * stream);
각 입출력에서 "버퍼를 비운다"의 실제 의미
* 출력버퍼를 비운다: 출력버퍼를 비운다는 말은 현재까지 저장된 모든 데이터를 '목적지(모니터, 파일)로 전송한다'
* 입력버퍼를 비운다: 입력버퍼 데이터를 소멸시킴(입력된 것을 삭제), 그러나 fflush() 함수에서는 호출할 수 없다! -> ( getchar() 로 읽고 활용하지 않고 소멸 )
OS의 종류에 따라 어떤 OS는 프로그램이 전부 끝난 후에 출력이 이루어 질 수 있고, 어떤 OS는 버퍼가 비워질때 출력이 이루어지는 경우가 있다.
그래서 특정경우 출력이 반드시 필요할 때는 해당 버퍼를 비워주어야 어떤 OS든간에 출력이 가능하다.
#include <stdio.h>
// fflush는 출력버퍼를 비우는 함수 !
int main()
{
FILE * fp = fopen("data.txt", "wt");
fflush(fp); // 이렇게 fclose() 함수를 호출하지 않고, 중간에 fflush()함수를 이용해서 버퍼를 비울수도 있다.
// 하지만, 버퍼를 비운다 해도 fopen이 열리면 반드시 fclose를 하는 습관을 갖자.
fclose(fp);
return 0;
}
* 주의 visual studio에서는 입력버퍼 비울때 fflush 함수를 허용하나, 이것은 표준이 아니므로 가급적이면 사용하지 않는 것이 좋다. (해당코드가 다른 OS에서 안돌 수 있다) 즉, fflush(stdin) 이런건 사용하지 않기.
반응형
'C언어 \ C++' 카테고리의 다른 글
[C언어] 문자열(string)을 복사하는 함수 (문자열 메모리를 복사, strcpy, strncpy 함수) (0) | 2022.02.27 |
---|---|
[C언어] 문자열(string)의 길이를 보는 함수 (strlen 함수) (0) | 2022.02.27 |
[C언어] 문자열 입력 버퍼(buffer) 비우기 함수 (0) | 2022.02.25 |
[C언어] 문자열(string) 입출력 (puts, fputs, gets, fgets) 사용법 (0) | 2022.02.25 |
[C언어] 파일 읽기 쓰기(read, write) 추가하기 모드 종류 (wt, rb, a+t) (0) | 2022.02.22 |