programing

C의 버퍼 플러시

randomtip 2022. 8. 30. 21:48
반응형

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)는, 이 조작하지 말아 주세요.플러싱stdinC11 표준 제7.21.5.2절에 따라 정의되지 않은 동작입니다.

스트림이 출력 스트림을 가리키는 경우...fflush 함수는 해당 스트림의 쓰기되지 않은 데이터를 파일에 씁니다.그렇지 않으면 동작은 정의되지 않습니다.

일부 시스템에서는 Linux가 의 man 페이지에서 볼 수 있듯이 정의된 동작이 있지만 시스템에 따라 코드가 이식되지 않습니다.

입력 버퍼에 가비지가 "막힐"까 봐 걱정되시면fpurge()그 점에 대해서요.자세한 내용은 여기를 참조해 주세요.fflush()그리고.fpurge()

언급URL : https://stackoverflow.com/questions/12450066/flushing-buffers-in-c

반응형