fputs에서 fwrite 로 변경 후 버퍼타입이 헷갈리는데요
169
작성한 질문수 5
동영상에서 34분 전후를 보면
fputs는 line 버퍼 사용하고 있고
fwrite 로 변경후 fully 버퍼를 사용한다고 나오는데
fwrite 를 써도 출력 대상이 stdout 이니까
버퍼 종류는 똑같이 line 버퍼가 아닌가요?
답변 1
0
안녕하세요.
fputs는 문자열에 '\n'가 나오면 버퍼가 비위지는 fflush가 되기 때문에 출력 되고 fwrite는 라이브러리 버퍼가 꽉 채워지지 않으면 출력이 안되므로 fully 버퍼 방식을 사용 합니다. 똑같이 stdout 으로 출력 되더라도 버퍼링을 안 할 수도 있고 , line buffered, fully buffered 로 작동되도록 library 안에 구현 되어 있습니다.
0
답변 주신거 참조해서 정리해봤습니다.
fputs 이나 fwrite 모두 출력 대상에 따라 버퍼 종류가 결정된다.
stdout 에 fputs 으로 출력 시 라인버퍼 즉 개행을 만나거나 버퍼가 꽉 차면 flush 하지만
fgets 읽었기때문에 개행까지만 읽어서 개행 수만큼 루프가 돌고 sleep 이 실행됐다.stdout 에 fwrite 으로 출력 시 역시 라인버퍼이며 개행을 만나거나 버퍼가 꽉 차면 flush 하지만
fread 로 읽었기 때문에 개행이 여러개 포함되었고 결과적으로 한번의 호출에
읽은 개행 수 만큼 flush 하여 fgets 보다 루프를 덜 실행하고 sleep 도 덜 실행되서
fputs 보다 상대적으로 빠르게 동작했다.
모의고사 1회 계산문제 2개 맞았는데
0
5
1
업캐스팅 문제 예시 4번 부모 호출
0
16
1
압축 파일 암호 관련 질문
0
14
2
모의고사 자료 해설이 너무 불친절하네요.
0
40
2
부모의 생성자 출력 관련
0
16
2
이론파트 재탕문제
0
19
0
누락코드
0
20
1
다차원 배열 포인터 질문있습니다
0
33
3
이론 파트 재탕
0
36
1
모의고사 5회
0
32
1
12분 10초 func(values, 0, 1)을 넣을 때
0
38
1
모의고사 1회 4번 문제와 관련한 질문이 있습니다.
0
40
2
재탕문제
0
57
1
재탕문제
0
38
0
파이썬 추가 코드
0
52
1
78번 강의 관련 온도센서 질문이 있습니다.
0
50
1
배열 포인터 출력 표시
0
53
2
포인터 증감 또는 값 증감
0
53
2
배열 포인터 함수 관련
0
52
2
실기 이론 통합 요약본 버전
0
66
2
업캐스팅 3번 문제 예시
0
63
2
카페 등업신청
0
44
1
구글드라이브 접속 불가
0
52
2
주소에서 &기호 질문
0
77
1





