Loading repository data…
Loading repository data…
samuelhm / repository
Este proyecto consiste en programar una librería en C. Tu librería tendrá un montón de funciones de propósito general en las que se apoyarán tus programas.
Implementación desde cero de la biblioteca estándar de C, diseñada como base fundamental para proyectos de bajo nivel y sistemas embebidos. Este proyecto representa el primer pilar del currículo de 42 School, demostrando dominio de gestión manual de memoria, punteros avanzados y estructuras de datos.
ft_isalpha, ft_isdigit, ft_isalnum, ft_isascii, ft_isprintft_toupper, ft_tolowerft_memset, ft_bzero, ft_memcpy, ft_memmoveft_memchr, ft_memcmp, ft_callocft_strlen, ft_strlcpy, ft_strlcat, ft_strchr, ft_strrchrft_strncmp, ft_strnstr, ft_strdup, ft_substrft_strjoin, ft_strtrim, ft_split, ft_strmapi, ft_striterift_atoi, ft_itoaft_putchar_fd, ft_putstr_fd, ft_putendl_fd, ft_putnbr_fdft_lstnew, ft_lstadd_front, ft_lstadd_back, ft_lstsize, ft_lstlastft_lstdelone, ft_lstclear, ft_lstiter, ft_lstmap, ft_lstremoveget_next_line(fd) - Lectura secuencial de líneas con soporte multi-FDft_printf() - Implementación completa con especificadores: %c, %s, %d, %i, %u, %x, %X, %pft_free_2d_array, ft_is_integer, ft_charjoin, ft_strcmp, ft_strfill_fd| Componente | Tecnología |
|---|---|
| Lenguaje | C (C99) |
| Compilador | GCC |
| Build System | Makefile con dependencias automáticas |
| Salida | Biblioteca estática (libft.a) y dinámica (libft.so) |
| Dependencias | Solo headers estándar (stdlib.h, unistd.h, stdio.h) |
La biblioteca fue diseñada bajo el principio de zero-dependency: cada función gestiona su propia memoria sin depender de bibliotecas externas, garantizando máxima portabilidad. El Makefile implementa compilación separada con flags estrictos (-Wall -Wextra -Werror) y generación automática de dependencias de headers mediante -MMD, asegurando builds reproducibles y detección temprana de errores. Para get_next_line, se optó por un array estático save[FOPEN_MAX] que permite mantener estado persistente para múltiples file descriptors concurrentes, solucionando el reto técnico de lecturas intercaladas entre diferentes archivos sin contaminación de datos.
flowchart TB
subgraph Input["Entrada"]
FD[File Descriptor]
STR[String / Buffer]
end
subgraph Core["Nucleo Libft"]
direction TB
CHAR[Character Utils<br/>is* / to*]
MEM[Memory Utils<br/>mem* / calloc]
STRF[String Utils<br/>str* / split / join]
CONV[Conversion<br/>atoi / itoa]
IO[I/O Functions<br/>put*_fd]
LIST[Linked List<br/>lst*]
end
subgraph Bonus["Modulos Bonus"]
GNL[get_next_line<br/>Multi-FD]
PRINTF[ft_printf<br/>varargs]
end
subgraph Output["Salida"]
LIB[libft.a]
LIBSO[libft.so]
end
FD --> GNL
STR --> STRF
CHAR --> Core
MEM --> Core
STRF --> Core
CONV --> Core
IO --> Core
LIST --> Core
GNL --> LIB
PRINTF --> LIB
Core --> LIB
Core --> LIBSO
# Verificar compilador GCC
gcc --version
# Clonar el repositorio
git clone https://github.com/samuelhm/Libft42.git
cd Libft42
# Compilar biblioteca estática
make
# Compilar biblioteca dinámica (opcional)
make so
# Limpiar objetos intermedios
make clean
# Limpiar todo (incluye libft.a y libft.so)
make fclean
# Recompilar desde cero
make re
#include "libft.h"
int main(void)
{
char *str = " Hello, Libft42! ";
char *trimmed = ft_strtrim(str, " ");
char **split = ft_split("one,two,three", ',');
ft_printf("Original: '%s'\n", str);
ft_printf("Trimmed: '%s'\n", trimmed);
ft_printf("Split[0]: '%s'\n", split[0]);
free(trimmed);
ft_free_2d_array((void **)split);
return (0);
}
# Compilar tu proyecto con libft
gcc -I./inc main.c -L. -lft -o program
./program
Libft42/
├── inc/
│ └── libft.h # Header principal
├── src/
│ ├── ft_*.c # Funciones core
│ ├── get_next_line.c # Lectura secuencial
│ ├── ft_is_integer.c # Validacion de enteros
│ ├── ft_free_2d_array.c # Liberacion de arrays
│ └── ft_printf/ # Modulo printf
│ ├── ft_printf.c
│ ├── ft_printf.h
│ ├── ft_printf_utils.c
│ └── ft_printf_utils2.c
├── obj/ # Object files (generados)
├── libft.a # Biblioteca estática
├── libft.so # Biblioteca dinámica
└── Makefile # Sistema de build