C의 버퍼 플러시
할까fflush()
버퍼가 출력 스트림인 경우에도 버퍼 플러시에 사용할 수 없습니다.
그것은 무엇에 유용합니까?일반적으로 버퍼를 플러시하려면 어떻게 해야 합니까?
출력 버퍼 플러시:
printf("Buffered, will be flushed");
fflush(stdout); // Prints to screen or whatever your standard out is
또는
fprintf(fd, "Buffered, will be flushed");
fflush(fd); //Prints to a file
아주 유용한 기술이 될 수 있습니다.출력 버퍼를 플러시하는 이유는 무엇입니까?보통 내가 그걸 할 때, 그건 코드가 크래쉬해서 뭔가를 디버깅하려고 하기 때문이야.호출할 때마다 표준 버퍼가 인쇄되지 않습니다.printf()
가득 찰 때까지 기다렸다가 한꺼번에 버려요따라서 크래시 전에 함수 호출을 할 수 있는지 확인하려는 경우printf
예를 들어 "여기 왔다!"와 같은 경우, 충돌이 일어나기 전에 버퍼가 플러시되지 않아 실제로 얼마나 멀리 갔는지 알 수 없습니다.
멀티프로세스 또는 멀티스레드 코드로도 도움이 됩니다.다시 말씀드리지만 버퍼가 항상 콜에서 플러시되는 것은 아닙니다.printf()
따라서 여러 프로세스의 실제 실행 순서를 알고 싶다면 인쇄 후 버퍼를 플러시해야 합니다.
디버깅을 할 때 두통을 많이 덜어줍니다.그렇게 하는 것에 대해 생각할 수 있는 유일한 단점은 말이다.printf()
는 비용이 많이 드는 작업입니다(그 때문에 디폴트로는 버퍼를 플래시하지 않습니다).
입력 버퍼 플러시까지(stdin
)는, 이 조작하지 말아 주세요.플러싱stdin
C11 표준 제7.21.5.2절에 따라 정의되지 않은 동작입니다.
스트림이 출력 스트림을 가리키는 경우...fflush 함수는 해당 스트림의 쓰기되지 않은 데이터를 파일에 씁니다.그렇지 않으면 동작은 정의되지 않습니다.
일부 시스템에서는 Linux가 의 man 페이지에서 볼 수 있듯이 정의된 동작이 있지만 시스템에 따라 코드가 이식되지 않습니다.
입력 버퍼에 가비지가 "막힐"까 봐 걱정되시면fpurge()
그 점에 대해서요.자세한 내용은 여기를 참조해 주세요.fflush()
그리고.fpurge()
언급URL : https://stackoverflow.com/questions/12450066/flushing-buffers-in-c
'programing' 카테고리의 다른 글
vuex에서 상수 변수를 생성하시겠습니까? (0) | 2022.08.30 |
---|---|
작업이 스토어 개체로 이동된 후 이벤트 중복이 있습니다. (0) | 2022.08.30 |
동적 MathJax를 Vuejs 2로 업데이트하시겠습니까? (0) | 2022.08.30 |
int8_t, int_least8_t 및 int_fast8_t의 차이는 무엇입니까? (0) | 2022.08.30 |
Vuejs 'beforeunload' 이벤트가 예상대로 트리거되지 않음 (0) | 2022.08.30 |