From b76d3e530bd1a5135d708c644128ab3cca4e9a27 Mon Sep 17 00:00:00 2001 From: Ladebeze66 Date: Fri, 31 Jan 2025 20:19:24 +0000 Subject: [PATCH] readme --- .vscode/c_cpp_properties.json | 18 ++++++++ .vscode/launch.json | 24 ++++++++++ .vscode/settings.json | 59 ++++++++++++++++++++++++ README.md | 87 +++++++++++++++++++++++++++++++++++ 4 files changed, 188 insertions(+) create mode 100644 .vscode/c_cpp_properties.json create mode 100644 .vscode/launch.json create mode 100644 .vscode/settings.json create mode 100644 README.md diff --git a/.vscode/c_cpp_properties.json b/.vscode/c_cpp_properties.json new file mode 100644 index 0000000..cea4d3f --- /dev/null +++ b/.vscode/c_cpp_properties.json @@ -0,0 +1,18 @@ +{ + "configurations": [ + { + "name": "windows-gcc-x64", + "includePath": [ + "${workspaceFolder}/**" + ], + "compilerPath": "gcc", + "cStandard": "${default}", + "cppStandard": "${default}", + "intelliSenseMode": "windows-gcc-x64", + "compilerArgs": [ + "" + ] + } + ], + "version": 4 +} \ No newline at end of file diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..dde833b --- /dev/null +++ b/.vscode/launch.json @@ -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 + } + ] + } + ] +} \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..bb879da --- /dev/null +++ b/.vscode/settings.json @@ -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 +} \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..f1e4aa6 --- /dev/null +++ b/README.md @@ -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] \ No newline at end of file