Inflearn brand logo image

인프런 커뮤니티 질문&답변

나는그네님의 프로필 이미지
나는그네

작성한 질문수

고급 C언어

파일 입출력

fputs에서 fwrite 로 변경 후 버퍼타입이 헷갈리는데요

작성

·

29

0

동영상에서 34분 전후를 보면

fputs는 line 버퍼 사용하고 있고

fwrite 로 변경후 fully 버퍼를 사용한다고 나오는데

fwrite 를 써도 출력 대상이 stdout 이니까

버퍼 종류는 똑같이 line 버퍼가 아닌가요?

답변 1

0

김정인님의 프로필 이미지
김정인
지식공유자

안녕하세요.

fputs는 문자열에 '\n'가 나오면 버퍼가 비위지는 fflush가 되기 때문에 출력 되고 fwrite는 라이브러리 버퍼가 꽉 채워지지 않으면 출력이 안되므로 fully 버퍼 방식을 사용 합니다. 똑같이 stdout 으로 출력 되더라도 버퍼링을 안 할 수도 있고 , line buffered, fully buffered 로 작동되도록 library 안에 구현 되어 있습니다.

나는그네님의 프로필 이미지
나는그네
질문자

답변 주신거 참조해서 정리해봤습니다.

  1. fputs 이나 fwrite 모두 출력 대상에 따라 버퍼 종류가 결정된다.

  2. stdout fputs 으로 출력 시 라인버퍼 즉 개행을 만나거나 버퍼가 꽉 차면 flush 하지만
    fgets 읽었기때문에 개행까지만 읽어서 개행 수만큼 루프가 돌고 sleep 이 실행됐다.

  3. stdoutfwrite 으로 출력 시 역시 라인버퍼이며 개행을 만나거나 버퍼가 꽉 차면 flush 하지만


    fread 로 읽었기 때문에 개행이 여러개 포함되었고 결과적으로 한번의 호출에
    읽은 개행 수 만큼 flush 하여 fgets 보다 루프를 덜 실행하고 sleep 도 덜 실행되서
    fputs 보다 상대적으로 빠르게 동작했다.

 

나는그네님의 프로필 이미지
나는그네

작성한 질문수

질문하기