inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

리눅스 시스템 프로그래밍 - 이론과 실습

파일 포지션 - 라이브 프로그래밍

왜 읽을 때만 버퍼가 필요한지요?

162

MIN KWON

작성한 질문수 1

0

안녕하세요. 초보자입니다. 혹시 뒷부분에 관련 내용이 나오는지 잘 몰라서 질문합니다.

왜 fgets 할 때만 버퍼가 필요하고 fputs에는 버퍼가 필요하지 않는 것인지요?

fputs에 필요없으면 사실은 fgets에도 없이 바로 읽을 수 있을 것 같은데..

궁금합니다..!

linux

답변 1

2

런잇(ProgCoach4U)

fgets API가 반드시 버퍼를 파라미터로 넣어줘야 하는 방식으로 설계되었기 때문이에요. 한마디로 만든 사람이 그렇게 만들었으니 어쩔 수 없는 것이죠. 만약 fgets()도 strdup()과 같이 API 내부에서 메모리를 동적으로 할당받아 리턴해주는 형식으로 구현했다면 버퍼 없이 파일 내용을 읽을 수 있겠죠. 하지만 fgets API가 call-by-reference(혹은 call-by-address라고도 하죠) 방식으로 파일을 읽은 내용을 API caller에게 전달하도록 설계/구현된 것입니다.

fputs API도 파일에 쓸 내용을 버퍼(캐릭터 배열 혹은 캐릭터 포인터)에 저장해 넘길 수 있습니다. 반드시 큰 따옴표로 된 문자열 상수(예: "hello world")를 넘겨야 하는 것은 아닙니다.

이해가 되셨는지 모르겠네요. 이외에도 더 궁금한 내용 있으시면 질문 남겨주세요~

inotify 객체에 등록된 watch descriptor 해제 관련 질문

0

37

2

select API 실습 코드 질문

0

41

2

wsl에서 fcntl사용

0

74

2

inotify_event 구조체 질문 [파일 이벤트 - 라이브 프로그래밍]에서...

0

181

2

./stat 파일이름

0

274

2

fopen r, r+모드 차이

0

460

2

강의를 모두 수강하고 스스로 구현하면 좋을 과제나 프로젝트 주제가 있을까요?

0

327

1

pthread 질문

0

420

2

I/O Multiplexing(select) 질문

0

326

1

inotify.c. ret 질문

0

303

1

inotify.c 질의합니다.

1

318

1

child process

0

715

1

read/blocking

0

566

1

flock

0

566

1

system call

0

599

1

pthread_create() 함수 이용했을 때, thread가 두번 호출되는 것 처럼 나타납니다. 왜 그런것인가요?

0

487

1

fork() 함수 사용시 결과 관련 질문

0

372

1

exec 관련 궁금한 사항

0

451

2

파일 디스크립터와 FILE 구조체에 대한 질문

0

553

1

buf 선언에 따른 read() fail 문제

0

252

2

파일 이벤트 - 라이브 프로그래밍 에서 캐스팅 질문

0

255

1

2번 multi thread 방법 질문

0

243

1

segmentation fault 발생 관련 문의

1

843

1

라이브 코딩 실습 코드

0

236

1