O objetivo deste primeiro projeto é criar uma biblioteca totalmente desenvolvida em C e aprender como funcionam as funções mais comuns na programação, envolvendo manipulação de strings, conversões de tipos, listas encadeadas, dentre outras. Essas funções são implementadas do zero, sem o auxílio de bibliotecas externas, sendo exceções apenas o uso do write (para saída de dados) e o malloc (para alocamento de memória). E uma vez criada, esta biblioteca será usada nos projetos futuros, uma vez que o auxílio de bibliotecas externas segue proibido como regra.
| Implementação | Manual | Protótipo |
|---|---|---|
| ——————— | ————— | —————————————————————————————————— |
| ft_isalpha | isalpha | int ft_isalpha(int c); |
| ft_isdigit | isdigit | int ft_isdigit(int c); |
| ft_isalnum | isalnum | int ft_isalnum(int c); |
| ft_isascii | isascii | int ft_isascii(int c); |
| ft_isprint | isprint | int ft_isprint(int c); |
| ft_isspace | isspace | int ft_isspace(int c); |
| ft_toupper | toupper | int ft_toupper(int c); |
| ft_tolower | tolower | int ft_tolower(int c); |
| Implementação | Manual | Protótipo |
|---|---|---|
| ——————— | ————— | —————————————————————————————————— |
| ft_strlen | strlen | size_t ft_strlen(const char *src); |
| ft_strlcpy | strlcpy | size_t ft_strlcpy(char *dst, const char *src, size_t len); |
| ft_strlcat | strlcat | size_t ft_strlcat(char *dst, const char *src, size_t len); |
| ft_strchr | strchr | char *ft_strchr(const char *src, int c); |
| ft_strrchr | strrchr | char *ft_strrchr(const char *src, int c); |
| ft_strncmp | strncmp | int ft_strncmp(const char *stra, const char *strb, size_t n); |
| ft_strnstr | - | char *ft_strnstr(const char *big, const char *little, size_t n); |
| ft_substr | - | char *ft_substr(char const *s, unsigned int start, size_t len); |
| ft_strjoin | - | char *ft_strjoin(char const *s1, char const *s2); |
| ft_strtrim | - | char *ft_strtrim(char const *s1, char const *set); |
| ft_split | - | char **ft_split(char const *s, char c); |
| ft_strmapi | - | char *ft_strmapi(char const *s, char (*f)(unsigned int, char)); |
| ft_striteri | - | void ft_striteri(char *s, void (*f)(unsigned int, char*)); |
| Implementação | Manual | Protótipo |
|---|---|---|
| ——————— | ————— | —————————————————————————————————— |
| ft_bzero | bzero | void ft_bzero(void *s, size_t n); |
| ft_calloc | calloc | void *ft_calloc(size_t nitems, size_t size); |
| ft_memset | memset | void *ft_memset(void *src, int c, size_t n); |
| ft_memcpy | memcpy | void *ft_memcpy(void *dst, const void *src, size_t n); |
| ft_memchr | memchr | void *ft_memchr(const void *src, int c, size_t n); |
| ft_memcmp | memcmp | int ft_memcmp(const void *stra, const void *strb, size_t n); |
| ft_memmove | memmove | void *ft_memmove(void *dst, const void *src, size_t n); |
| ft_strdup | strdup | char *ft_strdup(const char *s1); |
| Implementação | Manual | Protótipo |
|---|---|---|
| ——————— | ————— | —————————————————————————————————— |
| ft_atoi | atoi | int ft_atoi(const char *strNum); |
| ft_itoa | - | char *ft_itoa(int n); |
| Implementação | Manual | Protótipo |
|---|---|---|
| ——————— | ————— | —————————————————————————————————— |
| ft_putchar_fd | - | void ft_putchar_fd(char c, int fd); |
| ft_putstr_fd | - | void ft_putstr_fd(char *s, int fd); |
| ft_putendl_fd | - | void ft_putendl_fd(char *s, int fd); |
| ft_putnbr_fd | - | void ft_putnbr_fd(int n, int fd); |
| Implementação | Manual | Protótipo |
|---|---|---|
| ——————— | ————— | —————————————————————————————————— |
| ft_lstnew | - | t_list *ft_lstnew(void *content); |
| ft_lstadd_front | - | void ft_lstadd_front(t_list **lst, t_list *new); |
| ft_lstsize | - | int ft_lstsize(t_list *lst); |
| ft_lstlast | - | t_list *ft_lstlast(t_list *lst); |
| ft_lstadd_back | - | void ft_lstadd_back(t_list **lst, t_list *new); |
| ft_lstdelone | - | void ft_lstdelone(t_list *lst, void (*del)(void *)); |
| ft_lstclear | - | void ft_lstclear(t_list **lst, void (*del)(void *)); |
| ft_lstiter | - | void ft_lstiter(t_list *lst, void (*f)(void *)); |
| ft_lstmap | - | t_list *ft_lstmap(t_list *lst, void *(*f)(void *), void (*del)(void *)); |
No terminal, digite:
make
Para testar a biblioteca, é necessário criar uma main.c com o cabeçalho #include "libft.h" e depois compilar com a libft.a:
cc -Wall -Werror -Wextra -I ./includes -c main.c -o ./objs/main.o
cc -Wall -Werror -Wextra ./objs/main.o libft.a
O formato geral de nomenclatura das páginas de manual no Linux segue a convenção nome(seção). A seção do manual indica a categoria à qual o tópico pertence. Seções:
- Seção 1: São os comandos executáveis do usuário (por exemplo, comandos de shell, utilitários do sistema).
- Seção 2: São as chamadas de sistema do kernel.
- Seção 3: São as bibliotecas de funções do C.
- Seção 3p: São as funções de bibliotecas POSIX (Portable Operating System Interface).
- Seção 4: São os arquivos especiais (por exemplo, arquivos de dispositivo).
- Seção 5: São os formatos de arquivo e convenções.
- Seção 7: São as convenções, protocolos e padrões de sistema.
- Seção 8: São os comandos e utilitários do sistema administrativo.
