inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

고급 C언어

파일 입출력

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

121

나는그네

작성한 질문수 5

0

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

fputs는 line 버퍼 사용하고 있고

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

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

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

c 컴퓨터-구조 임베디드 device-driver

답변 1

0

김정인

안녕하세요.

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

0

나는그네

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

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

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

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


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

 

메모리 동적할당시 메모리창 빨간 글씨

0

5

2

스위치 입력 - 실습 LED가 환하게 들어오지 않습니다.

0

9

1

[46강] EventEmitter를 활용한 10가지 패턴 중 플러그인 아키텍처

0

13

2

29강 5:00

0

19

2

어떤 방식으로 이 강의를 듣고 공부를 해야 하는지 고민 됩니다.

0

21

2

uC/OS-II RTOS 포팅 관련 질문

0

30

2

강의가 누락된것 같습니다.

0

32

2

벅컨버터 COMP핀 주파수 보상회로 계산 시 R_ESR값

0

26

2

띄어쓰기

0

32

2

쿼터스 스케메틱에 대한 질문

0

25

2

공부 순서

1

38

2

용어 발음법이 계속 바뀌는 것 같은데 이런 부분들 개선이 가능할까요...?

0

41

1

재귀함수 연산법

0

31

2

Center Align PWM 설정 코드 질문

0

28

1

리눅스로 진행해도 될까요?

0

33

2

FIFO 질문

0

25

2

주파수 응답 특성 그래프 튜닝 방식

0

37

2

USART 통신 문의

0

34

2

전동 킥보드에 사용되는 f767 고출력 모델 문의

0

38

3

call stack 표현이 잘못표현된것이 아닌가요?

0

79

2

111번째 강의까지 진행했는데, 온도 정보 받아오는 게 안돼요.

0

24

1

26년 1회차 기출 강의

0

62

2

모터 선정 질문

0

48

2

주소에서 &기호 질문

0

47

1