Esse projeto é sobre desenvolver uma função que lê um fd linha por linha.
Nota: 125/100 ✔️
Esse é o segundo projeto do curriculo da 42SP. Consiste em criar uma função que seja capaz de ler de um fd uma linha por vez até o fim.
De forma resumida um fd é uma forma do sistema mapear um arquivo para um ponteiro de memória. Um fd é representado como um inteiro dentro do programa, sendo 3 padrões que são frequentemente usados sendo:
- 0: stdin
- 1: stdout
- 2: stderr
Qualquer arquivo aberto pelo programa pode ser mapeado para um fd. No Linux a quantidade maxima de fds que podem ser abertos por uma programa é de 1024.
A GNL é uma função auxiliar, ela lê uma linha de um fd e retorna a linha lida a cada vez que é chamada. Para ser usada é necessario primeiro que um fd seja aberto e para isso existem funções auxiliares como a open e fopen.
Após o manuseio do arquivo ele precisa ser fechado com funções como a close e fclose.
A função GNL utiliza a função read para ler um arquivo a quantidade setada pelo BUFFER_SIZE, o retorno da read é a quantidade de caracteres lidos.
Com esse retorno em mãos a função GNL verifica se existe um '\n' nele (assim que é definido uma linha). Caso tenha sido lido mais bytes do que o necessario para compor uma linha a GNL trata esse retorno separando a linha lida e a parte restante em um buffer estatico para que seja utilizado na proxima chamada da função.
Baixe o repositorio e execute o seguinte comando no diretorio:
$ make
Sera gerado um arquivo chamado get_next_line.a. Agora você pode utilizar as funções em seus programas compilando da seguinte forma.
$ gcc -Wall -Wextra -Werror get_next_line.a main.c - nomeDoPrograma
Para limpar os arquivo objetos gerados ao compilar a biblioteca só utiliar o comando
$ make clean