Lire une ligne depuis un descripteur de fichier, quelle que soit sa longueur,
en un seul appel réutilisable : get_next_line(fd) renvoie la ligne suivante
(saut de ligne inclus) à chaque appel, jusqu'à NULL en fin de fichier. Projet
du tronc commun de l'École 42.
flowchart LR
FD[fd] -->|read BUFFER_SIZE| BUF[buffer de lecture]
BUF --> STASH[(stash statique<br/>persistant entre appels)]
STASH -->|jusqu'au prochain \n| LINE[ligne renvoyée]
STASH -.conserve le reste.-> STASH
Un buffer statique conserve ce qui a été lu au-delà du \n courant, de sorte
que l'appel suivant reprenne exactement où le précédent s'est arrêté. La taille
de lecture est configurable à la compilation via BUFFER_SIZE.
#include "get_next_line.h"
#include <fcntl.h>
#include <stdio.h>
int main(void)
{
int fd = open("file.txt", O_RDONLY);
char *line;
while ((line = get_next_line(fd)) != NULL)
{
printf("%s", line);
free(line);
}
close(fd);
return (0);
}cc -D BUFFER_SIZE=42 main.c get_next_line.c get_next_line_utils.c -o gnl- Version bonus (
*_bonus.c) : gère plusieurs descripteurs en parallèle, chacun avec son propre état.
get_next_line.c logique principale
get_next_line_utils.c helpers (longueur, concat, etc.)
get_next_line_bonus.c version multi-fd
MIT — voir LICENSE.