local variable
은 변수들은 stack 영역
에 할당되고 함수 호출시에 메모리에 할당되며 함수 종료시에 메모리에서 사라진다.
static variable
의 값은 Data 영역
에 저장된다.
Data 영역은 함수가 종료 되더라도 프로그램이 종료되지 않는 이상 메모리상에 남아있다.
코드 영역
실행될 코드가 저장되는 메모리 공간.
CPU는 코드영역에서 저장된 명령문들을 하나씩 가져가서 실행한다.
데이터 영역
전역변수와 static변수가 할당된다.
스택 영역
: 지역변수와 매개변수가 할당된다. 컴파일 타임에 크기가 결정됨
힙 영역
: 프로그래머가 원하는 변수를 할당한다. 런타임에 크기가 결정됨
위 사진의 Low, High는 High → Low : 스택 영역 → 힙 영역 → 데이터 영역 → 코드 영역이다.
출처 : https://velog.io/@t1won/메모리-구조
HEAP과 STACK은 사실 같은 영역을 공유하고 있다.
Heap은 메모리 위쪽 주소부터 할당(LOW -> HIGH)
Stack은 아래쪽부터 할당(HIGH -> LOW)
서로 겹치는 것 Stack/Heap Overflow라고 한다.
EOF = End Of File 이며, 파일의 끝을 표현하기 위해 정의해 놓은 상수이다. 값 -1
프로세스 내에서 열린 파일을 구분하기 위한 정수
Min : 0
Max : OPEN_MAX [ ulimit -n 명령어로 확인 ]
fd | Represents | POSIX Name | stdio stream | Examples |
---|---|---|---|---|
0 | Standard input | STDIN_FILENO | stdin | Keyboard, file, terminal |
1 | Standard output | STDOUT_FILENO | stdout | Screen, database |
2 | Standard error | STDERR_FILENO | stderr | File, terminal |
함수 프로토타입 : 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 |
설명 | 파일 디스크립터로부터 한 줄을 읽고, 반환하는 함수를 작성하시오. |
get_next_line
성공하기.get_next_line
을 사용하여 여러 개의 파일 디스크립터를 관리할 수 있는 것. 예를 들어, 파일 디스크립터 3, 4, 5에 접근 가능한 경우get_next_line
은 각 디스크립터의 리딩 스레드를 잃지 않은 채로 3에서 한 번, 4에서 한 번, 다시 3에서 한 번, 5에서 한 번 호출될 수 있습니다. (fd3 한 줄 → fd4 두 줄 → fd3 두 줄 이런 식으로 읽을 수도 있어야 한다)[C언어] 메모리 영역 / malloc함수 - [C언어] 메모리 영역 / malloc함수 | 작성자 호로요이이