inflearn logo
강의

講義

知識共有

高度なC言語

ファイル入出力

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

103

ksk28110004

投稿した質問数 5

0

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

fputs는 line 버퍼 사용하고 있고

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

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

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

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

回答 1

0

jikim1770

안녕하세요.

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

0

ksk28110004

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

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

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

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


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

 

안녕하세요. 계속 프로젝트를 해야지 하다가 결제하고 환경 설정 중입니다.

0

13

1

3강 질문

0

15

1

Export template 안됨

1

26

2

2강 nodejs 3단계 설명 질문

0

33

1

scanf("%d\n") 의미

0

20

1

필기자료 사라졌나요?(실기 일주일만에 안돼서 재도전-_-)

0

37

2

13강 프로젝트생성해보기 관련 질문

0

24

3

LPDDR4의 VDD2 / VDDQ 전원 질문

0

24

1

26년 1회 실기 해설 강의

0

51

2

벅컨버터 사용 및 그라운드 분리

0

45

2

ODT_CA 셋업 관련 문의

0

33

1

CS에 관한 질문

0

23

1

주소 연산자(&) 간접 지정자(*) 반대 개념

0

33

1

53번 4-1 자료 오류 있는 것 같습니다.

0

68

2

[HDL 32장-2부] 참고 링크 관련

1

36

2

7번문제

0

57

2

C언어 변형문제 9번문제 Pdf 수정요청

0

45

2

메서드 오버드라드

0

45

2

EEPROM I2C 풀업저항

0

46

2

실수

0

45

1

강의 만료일 연장 신청

0

33

2

공부 우선순위 우선강의 알려주세요

0

85

1

생성자 호출순서 강의 10번 문제 30분대 질문입니다

0

46

2

주소에서 &기호 질문

0

36

1