Prototype
int get_next_line(int fd, char **line);Turn in files
get_next_line.c, get_next_line_utils.c, get_next_line.hParameters
#1. file descriptor for reading
#2. The value of what has been readReturn value
1 : A line has been read
0 : EOF has been reached
-1 : An error happenedExternal functs.
read, malloc, freeDescription
Write a function which returns a line read from a file descriptor, without the newline.
• Calling your function get_next_line in a loop will then allow you to read the text available on a file descriptor one line at a time until the EOF.
• Make sure that your function behaves well when it reads from a file and when it reads from the standard input.
• libft is not allowed for this project. You must add a get_next_line_utils.c file which will contain the functions that are needed for your get_next_line to work.
• Your program must compile with the flag -D BUFFER_SIZE=xx. which will be used as the buffer size for the read calls in your get_next_line. This value will be
modified by your evaluators and by moulinette.
• Compilation will be done this way : gcc -Wall -Wextra -Werror -D BUFFER_SIZE=32
get_next_line.c get_next_line_utils.c
• Your read must use the BUFFER_SIZE defined during compilation to read from a file or from stdin.
• In the header file get_next_line.h you must have at least the prototype of the function get_next_line.
• We consider that get_next_line has an undefined behavior if, between two calls, the same file descriptor switches to a different file before EOF has been reached on the first fd.
• lseek is not an allowed function. File reading must be done only once.
• Finally we consider that get_next_line has an undefined behavior when reading from a binary file. However, if you wish, you can make this behavior coherent.
• Global variables are forbidden.
• Turn-in all 3 initial files with _bonus for this part.
• To succeed get_next_line with a single static variable.
• To be able to manage multiple file descriptor with your get_next_line.
static 변수타입 변수이름 = 초기값(compile-time 상수로만 초기화가 가능); 형태로 초기화 되며 프로그램 실행시 단 한 번만 초기화된다. 초기값 지정이 없으면 0으로 초기화된다.
또한 정적변수를 선언한 함수(static 지역변수) 또는 프로그램(static 전역 변수)를 호출하면, 매번 정적변수에 저장되어있던 값을 불러와서 사용하고 연산된 값을 저장한다.
통용 범위는 함수 내부(static 지역변수), 프로그램 내부(static 전역변수)로 국한된다.
(static으로 선언한 변수를 extern으로 사용하려고 하면 컴파일(링크) 에러가 발생)
저장 장소는 전역변수와 같은 정적 데이터 영역이다.
정적 데이터 영역에 저장되므로 프로그램 실행중에 항상 존재한다.
프로그램 종료와 함께 메모리에서 사라진다.
ssize_t read(int fd, void *buf, size_t nbytes);parameter
fd : 읽어들일 file descriptor
buf : read로 읽어들인 값을 저장할 buffer
nbytes : 읽어들일 바이트 수
(참고 : 매개변수(parameter)는 변수(variable)로, 전달인자(argument)는 값(value)으로 보는 것이 일반적이다.)
open되어있는 file descriptor의 파일을 첫 byte부터(첫 메모리 1바이트 부터)nbytes 씩 차례로 읽어온다.
read를 여러번 호출할 경우 내부적으로 파일 내용을 읽어들인 만큼 포인터를 이동시켜서 다음 읽어들일 글자부터 차례대로 읽어온다.
(ex : 첫 호출때 3바이트 읽었다면, 4번째 바이트 부터 읽어옴)
read에 실패했다면 -1을 return
성공적으로 읽어들었다면 읽어들인 바이트 수를 return
파일의 끝에 도달했다면 0을 return
파일의 끝까지 남은 바이트 수가 nbytes보다 작다면 남은 바이트 수만큼을 return
(ex : nbytes = 10일때 남은 글자수가 7byte라면 7을 return)