Simple Libc

Introduzione

Consideriamo un programma in C che conta il numero di caratteri di una stringa.

#include <stdio.h>
#include <string.h>

int main(void) {
  char *parola = "Esadecimale";
  printf("%zu\n", strlen(parola));
  return 0;
}

Osserviamo l'utilizzo della funzione strlen. Tale funzione non fa parte del linguaggio C, ma fa parte della libreria standard che viene distribuita assieme al linguaggio C, la famosa libc. Una famosa implementazione open-source di tale libreria è la GNU C Library. La maggior parte dei programmi scritti in C utilizzano la libc.

L'obiettivo di questo progetto è implementare da zero alcune delle funzioni presenti nella libc. Nello specifico le funzioni da implementare sono suddivise nei seguenti gruppi:

nome funzioni
caratteri isalpha isdigit isalnum isascii isprint isupper islower isspace ispunct isxdigit toupper tolower
memoria memset bzero memcpy memmove memchr memcmp
stringhe strlen strchr strrchr strstr strnstr strncmp strlcpy strlcat
allocazione strdup calloc
conversione atoi

Ogni funzione avrà il prefisso esa_ in modo da non creare conflitti con quelle già esistenti. Ad esempio esa_strlen sarà l'implementazione della funzione classica strlen che conta il numero di caratteri in una stringa.

/* Funzione originale */
size_t  strlen(const char *s)

/* Funzione del progetto */
size_t  esa_strlen(const char *s)

L'artefatto finale del progetto sarà la creazione di due librerie: una statica chiamata libesa.a, e una dinamica chiamata libesa.so. Entrambe le librerie potranno essere utilizzate da altri codici C.

#include "./lib/libesa.h"

int main(void) {
  char *parola = "Esadecimale";
  printf("%zu\n", esa_strlen(parola));
  return 0;
}

Struttura del progetto

5 Milestone
~
11 Step