Common Instructions (Общие инструкции)

Your project must be written in accordance with the Norm. If you have bonusfiles/functions, they are included in the norm check and you will receive a 0 if thereis a norm error inside. Ваш проект должен быть написан в соответствии с Нормой. Если у вас есть бонусные файлы / функции, они включаются в проверку нормы, и вы получите 0, если внутри есть ошибка нормы.
Your functions should not quit unexpectedly (segmentation fault, bus error, double
free, etc) apart from undefined behaviors. If this happens, your project will be
considered non functional and will receive a 0 during the evaluation.в Ваши функции не должны неожиданно завершаться (ошибка сегментации, ошибка шины, двойное освобождение и т. Д.), За исключением неопределенного поведения. Если это произойдет, ваш проект будет считаться нефункциональным и получит 0 во время оценки.
All heap allocated memory space must be properly freed when necessary. No leaks will be tolerated. При необходимости все пространство памяти, выделенное кучей, должно быть должным образом освобождено. Утечки недопустимы.
If the subject requires it, you must submit a Makefile which will compile your
source files to the required output with the flags -Wall, -Wextra and -Werror, use
cc, and your Makefile must not relink. Если subject требует этого, вы должны отправить Makefile, который скомпилирует ваши исходные файлы в требуемый вывод с флагами -Wall, -Wextra и -Werror, используйте cc, и ваш Makefile не должен повторно связываться.
Your Makefile must at least contain the rules $(NAME), all, clean, fclean and re. Ваш Makefile должен содержать как минимум правила $ (NAME), all, clean, fclean и re.
To turn in bonuses to your project, you must include a rule bonus to your Makefile, which will add all the various headers, librairies or functions that are forbidden on the main part of the project. Bonuses must be in a different file _bonus.{c/h}. Mandatory and bonus part evaluation is done separately. Чтобы превратить бонусы в свой проект, вы должны включить бонус правила в свой Makefile, который добавит все различные заголовки, библиотеки или функции, запрещенные в основной части проекта. Бонусы должны быть в другом файле _bonus. {C / h}. Оценка обязательной и бонусной части проводится отдельно.
If your project allows you to use your libft, you must copy its sources and its associated Makefile in a libft folder with its associated Makefile. Your project’s Makefile must compile the library by using its Makefile, then compile the project. Если ваш проект позволяет вам использовать ваш libft, вы должны скопировать его исходный код и связанный с ним Makefile в папку libft с соответствующим Makefile. Makefile вашего проекта должен скомпилировать библиотеку, используя свой Makefile, а затем скомпилировать проект.
We encourage you to create test programs for your project even though this work won’t have to be submitted and won’t be graded. It will give you a chance to easily test your work and your peers’ work. You will find those tests especially useful during your defence. Indeed, during defence, you are free to use your tests and/or the tests of the peer you are evaluating. Мы рекомендуем вам создать тестовые программы для своего проекта, даже если эту работу не нужно будет отправлять и оценивать. Это даст вам возможность легко проверить свою работу и работу коллег. Вы найдете эти тесты особенно полезными во время защиты. Действительно, во время защиты вы можете использовать свои тесты и / или тесты партнера, которого вы оцениваете.
Submit your work to your assigned git repository. Only the work in the git repository will be graded. If Deepthought is assigned to grade your work, it will be done after your peer-evaluations. If an error happens in any section of your work during
Deepthought’s grading, the evaluation will stop. Отправьте свою работу в назначенный репозиторий git. Оцениваться будет только работа в репозитории git. Если DeepThreadt назначен для оценки вашей работы, это будет сделано после ваших оценок коллег. Если во время выставления оценок Deepoughtt в каком-либо разделе вашей работы произойдет ошибка, оценка будет остановлена.

Mandatory part (Обязательная часть)

| 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 (Параметры) | File descriptor to read from | Файловый дескриптор для чтения | | Return value (Возвращаемое значение) | Read line: correct behavior

NULL: nothing else to read or an error occurred | Строка чтения: правильное поведение NULL: больше нечего читать или произошла ошибка | | External functs (Внешние функции) | read, malloc, free | | | Description (Описание) | Write a function which returns a line read from a file descriptor | Напишите функцию, которая возвращает строку, прочитанную из файлового дескриптора |

Calling your function get_next_line in a loop will then allow you to read the text available on the file descriptor one line at a time until the end of it. Вызов функции get_next_line в цикле позволит вам читать текст, доступный в файловом дескрипторе, по одной строке за раз до его конца.
Your function should return the line that has just been read. If there is nothing else to read or if an error has occurred it should return NULL. Ваша функция должна возвращать только что прочитанную строку. Если читать больше нечего или произошла ошибка, он должен вернуть NULL.
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. libft не разрешена для этого проекта. Вы должны добавить файл get_next_line_utils.c, который будет содержать функции, необходимые для работы get_next_line.
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 the moulinette. Ваша программа должна компилироваться с флагом -D BUFFER_SIZE = xx, который будет использоваться в качестве размера буфера для вызовов чтения в вашей get_next_line. Это значение будет изменено вашими оценщиками и муленеткой.
The program will be compiled in this way:
cc -Wall -Wextra -Werror -D BUFFER_SIZE=42 <files>.c. Программа будет составлена таким образом: cc -Wall -Wextra -Werror -D BUFFER_SIZE=42 <файлы> .c.
Your read must use the BUFFER_SIZE defined during compilation to read from a file or from stdin. This value will be modified during the evaluation for testing purposes. Ваше чтение должно использовать BUFFER_SIZE, определенный во время компиляции, для чтения из файла или из стандартного ввода. Это значение будет изменено во время оценки в целях тестирования.
In the header file get_next_line.h you must have at least the prototype of the function get_next_line. В заголовочном файле get_next_line.h у вас должен быть как минимум прототип функции get_next_line.
Does your function still work if the BUFFER_SIZE value is 9999?  And if the BUFFER_SIZE value is 1?  And 10000000?  Do you know why?

Ваша функция все еще работает, если значение BUFFER_SIZE равно 9999? А если значение BUFFER_SIZE равно 1? А 10000000? Ты знаешь почему?
You should try to read as little as possible each time get_next_line is called.  If you encounter a newline, you have to return the current line.  Don’t read the whole file and then process each line.

Вы должны стараться читать как можно меньше при каждом вызове get_next_line. Если вы встретили новую строку, вы должны вернуть текущую строку. Не читайте файл целиком, а затем обрабатывайте каждую строку.
Don’t turn in your project without testing.  There are many tests to run, cover your bases.  Try to read from a file, from a redirection, from standard input.  How does your program behave when you send a newline to the standard output?  And CTRL-D?

Не сдавайте свой проект без тестирования. Есть много тестов, которые нужно запустить, охватите свои базы. Попробуйте прочитать из файла, из перенаправления, из стандартного ввода. Как ваша программа ведет себя, когда вы отправляете новую строку в стандартный вывод? А CTRL-D?
lseek is not an allowed function. File reading must be done only once.Важно: возвращаемая строка должна включать ’\ n’, кроме случаев, когда вы достигли конца файла, а ’\ n’ нет. lseek - недопустимая функция. Чтение файла необходимо производить только один раз.
We consider that get_next_line has undefined behavior if, between two calls, the same file descriptor switches to a different file before reading everything from the first fd Мы считаем, что get_next_line имеет неопределенное поведение, если между двумя вызовами один и тот же файловый дескриптор переключается на другой файл перед чтением всего из первого fd.
Finally we consider that get_next_line has undefined behavior when reading from a binary file. However, if you wish, you can make this behavior coherent. Наконец, мы считаем, что get_next_line имеет неопределенное поведение при чтении из двоичного файла. Однако при желании вы можете сделать такое поведение последовательным.
Global variables are forbidden. Глобальные переменные запрещены.
Important: The returned line should include the ’\n’, except if you have reached the end of file and there is no ’\n’. Важно: возвращаемая строка должна включать ’\ n’, кроме случаев, когда вы достигли конца файла, а ’\ n’ нет.
A good start would be to know what a static variable is:
Хорошим началом было бы узнать, что такое статическая переменная:

[<https://en.wikipedia.org/wiki/Static_variable>](<https://en.wikipedia.org/wiki/Static_variable>)

Bonus part

The project get_next_line is straightforward and leaves very little room for bonuses, but we are sure that you have a lot of imagination. If you have aced the mandatory part, then by all means, complete this bonus part to go further. Just to be clear, no bonuses will be taken into consideration if the mandatory part isn’t perfect. Turn-in all 3 mandatory files ending by _bonus.[c\h] for this part. Проект get_next_line прост и оставляет очень мало места для бонусов, но мы уверены, что у вас много фантазии. Если вы прошли обязательную часть, непременно выполните эту бонусную часть, чтобы продолжить. Чтобы было ясно, никакие бонусы не будут учитываться, если обязательная часть не идеальна. Сдайте все 3 обязательных файла, оканчивающихся на _bonus. [C \ h] для этой части.
To succeed get_next_line with a single static variable. Чтобы добиться успеха, get_next_line с единственной статической переменной.
To be able to manage multiple file descriptors with your get_next_line. For example, if the file descriptors 3, 4 and 5 are accessible for reading, then you can call get_next_line once on 3, once on 4, once again on 3 then once on 5 etc. without losing the reading thread on each of the descriptors. Чтобы иметь возможность управлять несколькими файловыми дескрипторами с помощью get_next_line. Например, если файловые дескрипторы 3, 4 и 5 доступны для чтения, вы можете вызвать get_next_line один раз на 3, один раз на 4, еще раз на 3, затем один раз на 5 и т. Д. Без потери потока чтения на каждом из дескрипторов. .