mirror of
https://github.com/Ladebeze66/getnextline.git
synced 2025-12-16 05:58:02 +01:00
readme
This commit is contained in:
parent
d901ad9116
commit
b76d3e530b
18
.vscode/c_cpp_properties.json
vendored
Normal file
18
.vscode/c_cpp_properties.json
vendored
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
{
|
||||||
|
"configurations": [
|
||||||
|
{
|
||||||
|
"name": "windows-gcc-x64",
|
||||||
|
"includePath": [
|
||||||
|
"${workspaceFolder}/**"
|
||||||
|
],
|
||||||
|
"compilerPath": "gcc",
|
||||||
|
"cStandard": "${default}",
|
||||||
|
"cppStandard": "${default}",
|
||||||
|
"intelliSenseMode": "windows-gcc-x64",
|
||||||
|
"compilerArgs": [
|
||||||
|
""
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"version": 4
|
||||||
|
}
|
||||||
24
.vscode/launch.json
vendored
Normal file
24
.vscode/launch.json
vendored
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
{
|
||||||
|
"version": "0.2.0",
|
||||||
|
"configurations": [
|
||||||
|
{
|
||||||
|
"name": "C/C++ Runner: Debug Session",
|
||||||
|
"type": "cppdbg",
|
||||||
|
"request": "launch",
|
||||||
|
"args": [],
|
||||||
|
"stopAtEntry": false,
|
||||||
|
"externalConsole": true,
|
||||||
|
"cwd": "e:/42school/projects/getnextline",
|
||||||
|
"program": "e:/42school/projects/getnextline/build/Debug/outDebug",
|
||||||
|
"MIMode": "gdb",
|
||||||
|
"miDebuggerPath": "gdb",
|
||||||
|
"setupCommands": [
|
||||||
|
{
|
||||||
|
"description": "Enable pretty-printing for gdb",
|
||||||
|
"text": "-enable-pretty-printing",
|
||||||
|
"ignoreFailures": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
59
.vscode/settings.json
vendored
Normal file
59
.vscode/settings.json
vendored
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
{
|
||||||
|
"C_Cpp_Runner.cCompilerPath": "gcc",
|
||||||
|
"C_Cpp_Runner.cppCompilerPath": "g++",
|
||||||
|
"C_Cpp_Runner.debuggerPath": "gdb",
|
||||||
|
"C_Cpp_Runner.cStandard": "",
|
||||||
|
"C_Cpp_Runner.cppStandard": "",
|
||||||
|
"C_Cpp_Runner.msvcBatchPath": "C:/Program Files/Microsoft Visual Studio/VR_NR/Community/VC/Auxiliary/Build/vcvarsall.bat",
|
||||||
|
"C_Cpp_Runner.useMsvc": false,
|
||||||
|
"C_Cpp_Runner.warnings": [
|
||||||
|
"-Wall",
|
||||||
|
"-Wextra",
|
||||||
|
"-Wpedantic",
|
||||||
|
"-Wshadow",
|
||||||
|
"-Wformat=2",
|
||||||
|
"-Wcast-align",
|
||||||
|
"-Wconversion",
|
||||||
|
"-Wsign-conversion",
|
||||||
|
"-Wnull-dereference"
|
||||||
|
],
|
||||||
|
"C_Cpp_Runner.msvcWarnings": [
|
||||||
|
"/W4",
|
||||||
|
"/permissive-",
|
||||||
|
"/w14242",
|
||||||
|
"/w14287",
|
||||||
|
"/w14296",
|
||||||
|
"/w14311",
|
||||||
|
"/w14826",
|
||||||
|
"/w44062",
|
||||||
|
"/w44242",
|
||||||
|
"/w14905",
|
||||||
|
"/w14906",
|
||||||
|
"/w14263",
|
||||||
|
"/w44265",
|
||||||
|
"/w14928"
|
||||||
|
],
|
||||||
|
"C_Cpp_Runner.enableWarnings": true,
|
||||||
|
"C_Cpp_Runner.warningsAsError": false,
|
||||||
|
"C_Cpp_Runner.compilerArgs": [],
|
||||||
|
"C_Cpp_Runner.linkerArgs": [],
|
||||||
|
"C_Cpp_Runner.includePaths": [],
|
||||||
|
"C_Cpp_Runner.includeSearch": [
|
||||||
|
"*",
|
||||||
|
"**/*"
|
||||||
|
],
|
||||||
|
"C_Cpp_Runner.excludeSearch": [
|
||||||
|
"**/build",
|
||||||
|
"**/build/**",
|
||||||
|
"**/.*",
|
||||||
|
"**/.*/**",
|
||||||
|
"**/.vscode",
|
||||||
|
"**/.vscode/**"
|
||||||
|
],
|
||||||
|
"C_Cpp_Runner.useAddressSanitizer": false,
|
||||||
|
"C_Cpp_Runner.useUndefinedSanitizer": false,
|
||||||
|
"C_Cpp_Runner.useLeakSanitizer": false,
|
||||||
|
"C_Cpp_Runner.showCompilationTime": false,
|
||||||
|
"C_Cpp_Runner.useLinkTimeOptimization": false,
|
||||||
|
"C_Cpp_Runner.msvcSecureNoWarnings": false
|
||||||
|
}
|
||||||
87
README.md
Normal file
87
README.md
Normal file
@ -0,0 +1,87 @@
|
|||||||
|
# Get_Next_Line
|
||||||
|
![illustration getnextline]()
|
||||||
|
Le projet get_next_line de l'École 42 vise à développer une fonction en C capable de lire et de retourner une ligne complète depuis un descripteur de fichier, à chaque appel. Ce projet est essentiel pour comprendre la gestion des entrées/sorties en C, la manipulation des descripteurs de fichiers, et l'utilisation des variables statiques.
|
||||||
|
|
||||||
|
🎯 Objectifs du Projet
|
||||||
|
Lecture Ligne par Ligne : Implémenter une fonction get_next_line qui lit une ligne complète depuis un descripteur de fichier donné.
|
||||||
|
|
||||||
|
Gestion des Descripteurs de Fichiers : Apprendre à manipuler les descripteurs de fichiers pour lire des données depuis différentes sources, telles que des fichiers ou l'entrée standard.
|
||||||
|
|
||||||
|
Utilisation des Variables Statiques : Comprendre et utiliser les variables statiques pour conserver l'état entre les appels de fonction, notamment pour gérer les données restantes entre les lectures.
|
||||||
|
|
||||||
|
🛠️ Spécifications Techniques
|
||||||
|
Prototype de la Fonction :
|
||||||
|
char *get_next_line(int fd);
|
||||||
|
|
||||||
|
Comportement Attendu :
|
||||||
|
La fonction doit lire une ligne complète depuis le descripteur de fichier fd et la retourner.
|
||||||
|
|
||||||
|
Une ligne est définie par une séquence de caractères se terminant par un saut de ligne ('\n') ou par la fin du fichier (EOF).
|
||||||
|
|
||||||
|
La fonction doit gérer les descripteurs de fichiers multiples, en conservant l'état de lecture pour chacun.
|
||||||
|
|
||||||
|
Gestion de la Mémoire :
|
||||||
|
|
||||||
|
Allouer dynamiquement la mémoire nécessaire pour chaque ligne lue.
|
||||||
|
|
||||||
|
Assurer la libération appropriée de la mémoire allouée pour éviter les fuites de mémoire.
|
||||||
|
|
||||||
|
Variables Statiques :
|
||||||
|
|
||||||
|
Utiliser des variables statiques pour stocker les données restantes entre les appels de la fonction, permettant ainsi de gérer correctement les lectures partielles.
|
||||||
|
|
||||||
|
🔧 Approche d'Implémentation
|
||||||
|
Lecture par Blocs :
|
||||||
|
|
||||||
|
Lire le contenu du descripteur de fichier par blocs de taille définie (BUFFER_SIZE).
|
||||||
|
|
||||||
|
Concaténer les blocs lus jusqu'à ce qu'une ligne complète soit obtenue.
|
||||||
|
|
||||||
|
Gestion des Lignes :
|
||||||
|
|
||||||
|
Identifier la position du caractère de saut de ligne ('\n') pour délimiter la fin de la ligne.
|
||||||
|
|
||||||
|
Extraire la ligne complète et conserver le reste des données pour les appels suivants.
|
||||||
|
|
||||||
|
Utilisation des Variables Statiques :
|
||||||
|
|
||||||
|
Stocker les données restantes après chaque lecture dans une variable statique, afin de les utiliser lors des appels ultérieurs de la fonction pour le même descripteur de fichier.
|
||||||
|
Gestion des Erreurs :
|
||||||
|
|
||||||
|
Gérer les cas où la lecture échoue, où la mémoire ne peut pas être allouée, ou où le descripteur de fichier est invalide.
|
||||||
|
|
||||||
|
📂 Structure du Projet
|
||||||
|
Fichiers Principaux :
|
||||||
|
|
||||||
|
get_next_line.c : Contient l'implémentation de la fonction principale get_next_line.
|
||||||
|
|
||||||
|
get_next_line.h : Déclare le prototype de la fonction et les inclusions nécessaires.
|
||||||
|
|
||||||
|
get_next_line_utils.c : Contient les fonctions utilitaires utilisées par get_next_line (par exemple, fonctions de manipulation de chaînes).
|
||||||
|
|
||||||
|
Compilation :
|
||||||
|
|
||||||
|
Utiliser un Makefile pour automatiser la compilation du projet.
|
||||||
|
|
||||||
|
Définir la macro BUFFER_SIZE lors de la compilation pour spécifier la taille des blocs de lecture.
|
||||||
|
|
||||||
|
🧪 Tests et Validation
|
||||||
|
Cas de Test :
|
||||||
|
|
||||||
|
Lire des fichiers de différentes tailles, y compris des fichiers vides et de très grands fichiers.
|
||||||
|
|
||||||
|
Tester la lecture depuis l'entrée standard (stdin).
|
||||||
|
|
||||||
|
Gérer les fichiers contenant des lignes sans saut de ligne final.
|
||||||
|
|
||||||
|
Gestion des Descripteurs Multiples :
|
||||||
|
|
||||||
|
Assurer que la fonction peut gérer plusieurs descripteurs de fichiers simultanément, en maintenant l'état de lecture pour chacun.
|
||||||
|
Vérification des Fuites de Mémoire :
|
||||||
|
|
||||||
|
Utiliser des outils tels que Valgrind pour détecter et corriger les fuites de mémoire potentielles.
|
||||||
|
|
||||||
|
📚 Ressources Utiles
|
||||||
|
|
||||||
|
[Dépôt GitHub : Implémentation de get_next_line][https://github.com/mcombeau/get_next_line]
|
||||||
|
[Vidéo Explicative : get_next_line expliqué spécial DBZ][https://www.youtube.com/watch?v=8E9siq7apUU]
|
||||||
Loading…
x
Reference in New Issue
Block a user