Reading a line from a file descriptor is way too tedious
This project involves programming a function that returns a line read from a file descriptor. It not only adds a convenient function to your collection but also introduces the concept of static variables in C programming.
I. Goals
II. Common Instructions
III. Mandatory Part
IV. Bonus Part
V. Submission and Peer-Evaluation
This project aims to enhance your programming skills by implementing a function that efficiently reads lines from a file descriptor using static variables.
- Project must be written in C.
 - Follow the Norm for coding standards.
 - Functions should not quit unexpectedly, and memory must be properly managed.
 - Submit a Makefile for compilation.
 - Include basic Makefile rules: 
$(NAME),all,clean,fclean, andre. - To turn in bonuses, include a 
bonusrule in your Makefile. - If your project allows the use of libft, copy its sources and associated Makefile into a libft folder.
 - Encouraged to create test programs for self-testing and peer evaluation.
 
- Function name: get_next_line
 - Prototype: 
char *get_next_line(int fd); - Turn in files: get_next_line.c, get_next_line_utils.c, get_next_line.h
 - Parameters: 
fd: The file descriptor to read from - Return value: Read line (correct behavior), NULL (no more to read or error)
 - External functs.: read, malloc, free
 - Description: Write a function that returns a line read from a file descriptor.
- Repeated calls to 
get_next_line()should let you read the text file pointed to by the file descriptor, one line at a time. - Return the read line or NULL if there's nothing else to read or if an error occurs.
 - The returned line should include the terminating 
\ncharacter, except if the end of the file was reached and does not end with a\ncharacter. - Header file 
get_next_line.hmust contain the prototype of theget_next_line()function. - Implement helper functions in 
get_next_line_utils.c. - Compile your code with the option 
-D BUFFER_SIZE=nto define the buffer size forread(). 
 - Repeated calls to 
 
Note: get_next_line() has undefined behavior if the file changes since the last call, and it also has undefined behavior when reading a binary file.
- Develop 
get_next_line()using only one static variable. - Manage multiple file descriptors simultaneously.
- You should be able to read from different file descriptors without losing the reading thread of each or returning a line from another fd.
 - Files for bonus: 
get_next_line_bonus.c,get_next_line_bonus.h,get_next_line_utils_bonus.c 
 
Turn in your assignment in your Git repository. Only the work inside your repository will be evaluated during the defense. Double-check file names for correctness. When writing tests, consider varying buffer and line sizes, and remember that a file descriptor does not only point to regular files. Cross-check with your peers and prepare a diverse set of tests for defense.