[42Seoul] get_next_line

seheo·2022년 7월 5일
0

42Seoul

목록 보기
3/3

사전 지식

1. static variables

local variable은 변수들은 stack 영역에 할당되고 함수 호출시에 메모리에 할당되며 함수 종료시에 메모리에서 사라진다.
static variable의 값은 Data 영역에 저장된다.
Data 영역은 함수가 종료 되더라도 프로그램이 종료되지 않는 이상 메모리상에 남아있다.

메모리 구조

메모리 영역 별 데이터 생성, 소멸

코드 영역

실행될 코드가 저장되는 메모리 공간.
CPU는 코드영역에서 저장된 명령문들을 하나씩 가져가서 실행한다.

데이터 영역

전역변수와 static변수가 할당된다.

  • 데이터 생성 :  프로그램 실행 시
  • 데이터 소멸 : 프로그램 종료 시

스택 영역

: 지역변수와 매개변수가 할당된다. 컴파일 타임에 크기가 결정됨

  • 데이터 생성 :  함수 진입 시
  • 데이터 소멸 : 함수 빠져나갈 시

힙 영역

: 프로그래머가 원하는 변수를 할당한다. 런타임에 크기가 결정됨

  • 데이터 생성 :  프로그래머가 원할 때
  • 데이터 소멸 : 프로그래머가 원할 때

Low, High

위 사진의 Low, High는 High → Low : 스택 영역 → 힙 영역 → 데이터 영역 → 코드 영역이다.

  • LOW 영역 : 커널 메모리
    • 운영체제를 위한 공간
    • 다른 프로세스와 공유
  • HiGH 영역 : 사용자 공간
    • 애플리케이션을 위한 공간

출처 : https://velog.io/@t1won/메모리-구조

HEAP과 STACK은 사실 같은 영역을 공유하고 있다.
Heap은 메모리 위쪽 주소부터 할당(LOW -> HIGH)
Stack은 아래쪽부터 할당(HIGH -> LOW)
서로 겹치는 것 Stack/Heap Overflow라고 한다.

static variable 특징

  • static 키워드를 앞에 붙여 사용
  • 초기값 0
  • 프로그램 시작되면 초기화는 딱 한번만 수행
  • 전역 변수 처럼 외부에서 사용 불가

2. EOF (End OF File)

EOF = End Of File 이며, 파일의 끝을 표현하기 위해 정의해 놓은 상수이다. 값 -1

3. File Descriptor

프로세스 내에서 열린 파일을 구분하기 위한 정수

Min ~ Max

Min : 0
Max : OPEN_MAX [ ulimit -n 명령어로 확인 ]

fd 0, 1, 2

fdRepresentsPOSIX Namestdio streamExamples
0Standard inputSTDIN_FILENOstdinKeyboard, file, terminal
1Standard outputSTDOUT_FILENOstdoutScreen, database
2Standard errorSTDERR_FILENOstderrFile, terminal

2. 목표

함수 프로토타입 : char *get_next_line(int fd)

fd 를 매개변수로 입력받고 fd 에서 한 줄씩 읽어 출력하는 함수입니다. 만약 읽을 것이 없거나, 오류가 발생하면 NULL을 반환합니다.

함수 이름get_next_line
프로토타입char *get_next_line(int fd);
제출할 파일get_next_line.c, get_next_line_utils.c, get_next_line.h
매개변수읽어들일 파일의 디스크립터 (서술자)
반환값읽혀질 라인 : 한줄이 제대로 읽힘
NULL : 읽을 라인이 더 이상 없거나 에러 발생
사용가능한 외부 함수read, malloc, free
설명파일 디스크립터로부터 한 줄을 읽고, 반환하는 함수를 작성하시오.
  1. 하나의 정적변수로 get_next_line성공하기.
  2. get_next_line을 사용하여 여러 개의 파일 디스크립터를 관리할 수 있는 것. 예를 들어, 파일 디스크립터 3, 4, 5에 접근 가능한 경우
  3. get_next_line은 각 디스크립터의 리딩 스레드를 잃지 않은 채로 3에서 한 번, 4에서 한 번, 다시 3에서 한 번, 5에서 한 번 호출될 수 있습니다. (fd3 한 줄 → fd4 두 줄 → fd3 두 줄 이런 식으로 읽을 수도 있어야 한다)

[C언어] 메모리 영역 / malloc함수 - [C언어] 메모리 영역 / malloc함수 | 작성자 호로요이이

[C/C++언어] static 변수를 쓰는 이유 (feat. 메모리 구조)

0개의 댓글