Fonctions du cours

Cette page regroupe les fonctions présentées dans le cours, classées par en-tête (le fichier à inclure avec #include). Chaque nom renvoie vers le bloc du cours qui donne sa signature, ses paramètres et sa valeur de retour.

La colonne Norme indique où la fonction est définie :

  • C : bibliothèque standard du C, disponible partout (aligned_alloc et les fonctions atomic_* datent de C11) ;

  • POSIX : norme des systèmes de type Unix (Linux, macOS, BSD…) ;

  • Linux/BSD : extension non portable, absente de la norme POSIX ;

  • macro : macro qui s’utilise comme une fonction.

Le man reste la référence complète : section 2 pour les appels système (man 2 open), section 3 pour les fonctions de bibliothèque (man 3 printf). Quand un nom existe aussi comme commande, précisez la section : man printf affiche la commande du shell, man 3 printf la fonction C.

La dernière section, Fonctions vues en TP, liste les fonctions utilisées dans les exercices sans être présentées dans le cours.

<stdio.h>

Fonction

Rôle

Norme

Chapitre

printf

Affiche un texte formaté sur la sortie standard.

C

Partie 1 - Bases de C

fprintf

Écrit un texte formaté dans un flux (stderr, fichier ouvert…).

C

Partie 1 - Bases de C

fflush

Vide le buffer d’un flux.

C

Partie 1 - Bases de C

scanf

Lit des valeurs formatées sur l’entrée standard.

C

Partie 1 - Bases de C

fgets

Lit une ligne (de taille bornée) depuis un flux.

C

Partie 1 - Bases de C

perror

Affiche sur stderr un message suivi de la description de errno.

C

Partie 1 - Bases de C

fopen

Ouvre un fichier et retourne un flux FILE *.

C

Partie 2 - Fichiers

fclose

Ferme un flux (après avoir vidé son buffer).

C

Partie 2 - Fichiers

fdopen

Associe un flux FILE * à un descripteur déjà ouvert.

POSIX

Partie 4 - Processus

setvbuf

Choisit le mode de bufferisation d’un flux (par ligne, par bloc…).

C

Partie 4 - Processus

Les fonctions suivantes n’ont pas de bloc détaillé : elles sont présentées dans le tableau libc/POSIX du chapitre Partie 2 - Fichiers.

Fonction

Signature

Rôle

Norme

fread

size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);

Lit des blocs d’octets depuis un flux.

C

fwrite

size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);

Écrit des blocs d’octets dans un flux.

C

fputs

int fputs(const char *s, FILE *stream);

Écrit une chaîne dans un flux (sans ajouter de \n).

C

getline

ssize_t getline(char **lineptr, size_t *n, FILE *stream);

Lit une ligne entière, en allouant le buffer dans la heap si besoin.

POSIX

snprintf

int snprintf(char *str, size_t size, const char *format, ...);

Écrit un texte formaté dans une chaîne, sans dépasser sa taille.

C

fseek

int fseek(FILE *stream, long offset, int whence);

Déplace la position de lecture/écriture d’un flux.

C

<stdlib.h>

Fonction

Rôle

Norme

Chapitre

atoi

Convertit le début d’une chaîne en int (sans détection d’erreur).

C

Partie 1 - Bases de C

malloc

Alloue une zone mémoire dans la heap.

C

Partie 1 - Bases de C

calloc

Alloue un tableau dans la heap, initialisé à zéro.

C

Partie 1 - Bases de C

realloc

Change la taille d’une zone allouée dans la heap.

C

Partie 1 - Bases de C

free

Libère une zone allouée dans la heap.

C

Partie 1 - Bases de C

exit

Termine le programme après avoir vidé les buffers des flux.

C

Partie 1 - Bases de C

rand

Retourne un entier pseudo-aléatoire entre 0 et RAND_MAX.

C

Partie 1 - Bases de C

srand

Initialise la graine utilisée par rand.

C

Partie 1 - Bases de C

posix_memalign

Alloue dans la heap une zone dont l’adresse est alignée.

POSIX

Partie 3 - Mémoire

aligned_alloc

Alloue dans la heap une zone dont l’adresse est alignée.

C

Partie 3 - Mémoire

<string.h>

Fonction

Rôle

Norme

Chapitre

strlen

Retourne la longueur d’une chaîne (sans le \0).

C

Partie 1 - Bases de C

strcpy

Copie une chaîne dans une autre.

C

Partie 1 - Bases de C

strncpy

Copie au plus n caractères d’une chaîne.

C

Partie 1 - Bases de C

strcat

Ajoute une chaîne à la fin d’une autre.

C

Partie 1 - Bases de C

strcmp

Compare deux chaînes.

C

Partie 1 - Bases de C

strcspn

Retourne la position du premier caractère appartenant à un ensemble donné.

C

Partie 1 - Bases de C

memset

Remplit une zone mémoire avec un même octet.

C

Partie 1 - Bases de C

strerror

Retourne la description d’un code d’erreur (errno ou code pthread).

C

Partie 1 - Bases de C

strsignal

Retourne la description d’un numéro de signal.

POSIX

Partie 4 - Processus

<time.h>

Fonction

Rôle

Norme

Chapitre

time

Retourne l’heure courante, en secondes depuis le 1er janvier 1970.

C

Partie 1 - Bases de C

clock

Retourne le temps CPU consommé par le programme.

C

Partie 3 - Mémoire

<unistd.h>

Fonction

Rôle

Norme

Chapitre

close

Ferme un descripteur de fichier.

POSIX

Partie 2 - Fichiers

write

Écrit des octets sur un descripteur.

POSIX

Partie 2 - Fichiers

read

Lit des octets depuis un descripteur.

POSIX

Partie 2 - Fichiers

lseek

Déplace la position de lecture/écriture d’un descripteur.

POSIX

Partie 2 - Fichiers

fork

Crée un processus enfant, copie du processus appelant.

POSIX

Partie 4 - Processus

getpid

Retourne le PID du processus appelant.

POSIX

Partie 4 - Processus

getppid

Retourne le PID du processus parent.

POSIX

Partie 4 - Processus

execl

Remplace le programme du processus (chemin, arguments en liste).

POSIX

Partie 4 - Processus

execlp

Remplace le programme du processus (recherche dans le PATH, arguments en liste).

POSIX

Partie 4 - Processus

execv

Remplace le programme du processus (chemin, arguments en tableau).

POSIX

Partie 4 - Processus

execvp

Remplace le programme du processus (recherche dans le PATH, arguments en tableau).

POSIX

Partie 4 - Processus

execle

Comme execl, avec un environnement fourni.

POSIX

Partie 4 - Processus

execve

Comme execv, avec un environnement fourni (l’appel système sous-jacent).

POSIX

Partie 4 - Processus

execvpe

Comme execvp, avec un environnement fourni.

Linux/BSD

Partie 4 - Processus

fexecve

Comme execve, le programme étant désigné par un descripteur.

POSIX

Partie 4 - Processus

_exit

Termine le processus immédiatement, sans vider les buffers de la libc.

POSIX

Partie 4 - Processus

pause

Suspend le processus jusqu’à la réception d’un signal.

POSIX

Partie 4 - Processus

sleep

Suspend le processus pendant un nombre de secondes.

POSIX

Partie 4 - Processus

pipe

Crée un pipe anonyme (un descripteur de lecture, un d’écriture).

POSIX

Partie 4 - Processus

unlink

Supprime un nom de fichier (fichier, FIFO…).

POSIX

Partie 4 - Processus

gettid

Retourne le TID du thread appelant (Linux uniquement).

Linux/BSD

Partie 5 - Threads

<fcntl.h>

Fonction

Rôle

Norme

Chapitre

open

Ouvre (ou crée) un fichier et retourne un descripteur.

POSIX

Partie 2 - Fichiers

<sys/stat.h>

Fonction

Rôle

Norme

Chapitre

umask

Fixe le masque des droits retirés à la création des fichiers.

POSIX

Partie 2 - Fichiers

mkfifo

Crée un pipe nommé (FIFO).

POSIX

Partie 4 - Processus

<sys/file.h>

Fonction

Rôle

Norme

Chapitre

flock

Pose ou retire un verrou sur un fichier ouvert.

Linux/BSD

Partie 2 - Fichiers

<sys/wait.h>

Fonction

Rôle

Norme

Chapitre

wait

Attend la fin d’un enfant quelconque.

POSIX

Partie 4 - Processus

waitpid

Attend la fin d’un enfant donné (sans bloquer avec WNOHANG).

POSIX

Partie 4 - Processus

WIFEXITED

Indique si l’enfant s’est terminé normalement.

macro

Partie 4 - Processus

WEXITSTATUS

Donne le code de retour de l’enfant.

macro

Partie 4 - Processus

WIFSIGNALED

Indique si l’enfant a été tué par un signal.

macro

Partie 4 - Processus

WTERMSIG

Donne le numéro du signal qui a tué l’enfant.

macro

Partie 4 - Processus

<signal.h>

Fonction

Rôle

Norme

Chapitre

kill

Envoie un signal à un processus.

POSIX

Partie 4 - Processus

sigaction

Choisit la réaction à un signal (gestionnaire, ignorer…).

POSIX

Partie 4 - Processus

sigemptyset

Vide un ensemble de signaux.

POSIX

Partie 4 - Processus

sigaddset

Ajoute un signal à un ensemble.

POSIX

Partie 4 - Processus

sigdelset

Retire un signal d’un ensemble.

POSIX

Partie 4 - Processus

sigismember

Teste si un signal fait partie d’un ensemble.

POSIX

Partie 4 - Processus

<pthread.h>

Fonction

Rôle

Norme

Chapitre

pthread_create

Crée un thread qui exécute une fonction.

POSIX

Partie 5 - Threads

pthread_join

Attend la fin d’un thread et récupère sa valeur de retour.

POSIX

Partie 5 - Threads

pthread_exit

Termine le thread appelant.

POSIX

Partie 5 - Threads

pthread_detach

Détache un thread : ses ressources sont libérées à sa fin, sans pthread_join.

POSIX

Partie 5 - Threads

pthread_attr_init

Initialise un objet d’attributs de thread.

POSIX

Partie 5 - Threads

pthread_attr_setdetachstate

Choisit dans les attributs si le thread sera créé détaché.

POSIX

Partie 5 - Threads

pthread_attr_destroy

Détruit un objet d’attributs de thread.

POSIX

Partie 5 - Threads

pthread_mutex_init

Initialise un mutex.

POSIX

Partie 5 - Threads

pthread_mutex_destroy

Détruit un mutex.

POSIX

Partie 5 - Threads

pthread_mutex_lock

Verrouille un mutex (attend s’il est déjà verrouillé).

POSIX

Partie 5 - Threads

pthread_mutex_unlock

Déverrouille un mutex.

POSIX

Partie 5 - Threads

pthread_cond_wait

Libère le mutex et attend un signal sur la variable de condition.

POSIX

Partie 5 - Threads

pthread_cond_signal

Réveille un thread en attente sur la variable de condition.

POSIX

Partie 5 - Threads

pthread_cond_broadcast

Réveille tous les threads en attente sur la variable de condition.

POSIX

Partie 5 - Threads

pthread_cond_init

Initialise une variable de condition.

POSIX

Partie 5 - Threads

pthread_cond_destroy

Détruit une variable de condition.

POSIX

Partie 5 - Threads

<stdatomic.h>

Fonction

Rôle

Norme

Chapitre

atomic_load

Lit une variable atomique.

C

Partie 5 - Threads

atomic_store

Écrit dans une variable atomique.

C

Partie 5 - Threads

atomic_fetch_add

Ajoute une valeur à une variable atomique et retourne l’ancienne valeur.

C

Partie 5 - Threads

atomic_fetch_sub

Soustrait une valeur à une variable atomique et retourne l’ancienne valeur.

C

Partie 5 - Threads

<sys/socket.h>

Fonction

Rôle

Norme

Chapitre

socket

Crée un socket et retourne son descripteur.

POSIX

Partie 6 - Sockets

setsockopt

Modifie une option d’un socket (par exemple SO_REUSEADDR).

POSIX

Partie 6 - Sockets

bind

Associe une adresse (IP et port) à un socket.

POSIX

Partie 6 - Sockets

listen

Met un socket TCP en écoute des connexions entrantes.

POSIX

Partie 6 - Sockets

accept

Accepte une connexion et retourne un nouveau descripteur pour ce client.

POSIX

Partie 6 - Sockets

connect

Connecte un socket à une adresse distante.

POSIX

Partie 6 - Sockets

send

Envoie des octets sur un socket connecté.

POSIX

Partie 6 - Sockets

recv

Reçoit des octets sur un socket connecté.

POSIX

Partie 6 - Sockets

sendto

Envoie un datagramme à une adresse donnée (UDP).

POSIX

Partie 6 - Sockets

recvfrom

Reçoit un datagramme et l’adresse de son expéditeur (UDP).

POSIX

Partie 6 - Sockets

shutdown

Ferme un sens de la communication, ou les deux.

POSIX

Partie 6 - Sockets

<arpa/inet.h>

Fonction

Rôle

Norme

Chapitre

htons

Convertit un entier 16 bits de l’ordre de l’hôte vers l’ordre réseau.

POSIX

Partie 6 - Sockets

htonl

Convertit un entier 32 bits de l’ordre de l’hôte vers l’ordre réseau.

POSIX

Partie 6 - Sockets

ntohs

Convertit un entier 16 bits de l’ordre réseau vers l’ordre de l’hôte.

POSIX

Partie 6 - Sockets

ntohl

Convertit un entier 32 bits de l’ordre réseau vers l’ordre de l’hôte.

POSIX

Partie 6 - Sockets

inet_pton

Convertit une adresse IP écrite en texte vers sa forme binaire.

POSIX

Partie 6 - Sockets

inet_ntop

Convertit une adresse IP binaire en texte.

POSIX

Partie 6 - Sockets

Fonctions vues en TP

Ces fonctions sont utilisées dans les exercices (énoncés ou corrections) mais ne sont pas présentées dans le cours. La colonne Exercice renvoie vers les exercices où elles apparaissent ; consultez leur page de man pour le détail.

<stdio.h>

Fonction

Signature

Rôle

Exercice

puts

int puts(const char *s);

Affiche une chaîne suivie d’un \n sur la sortie standard.

p1e6, p3e3

getchar

int getchar(void);

Lit un caractère sur l’entrée standard.

p3e6

feof

int feof(FILE *stream);

Indique si la fin de fichier a été atteinte sur un flux.

p2e8, p4e6

ferror

int ferror(FILE *stream);

Indique si une erreur s’est produite sur un flux.

p2e8, p2e9, p6e2

rename

int rename(const char *oldpath, const char *newpath);

Renomme (ou déplace) un fichier.

p2e6

<stdlib.h>

Fonction

Signature

Rôle

Exercice

strtol

long strtol(const char *nptr, char **endptr, int base);

Convertit une chaîne en long, en détectant les erreurs.

p2e9, p2e10

atol

long atol(const char *nptr);

Convertit une chaîne en long (sans détection d’erreur).

p5 (introduction)

atoll

long long atoll(const char *nptr);

Convertit une chaîne en long long (sans détection d’erreur).

p5 (introduction), p5e9

strtoul

unsigned long strtoul(const char *nptr, char **endptr, int base);

Convertit une chaîne en unsigned long, en détectant les erreurs.

p5 (introduction)

strtoull

unsigned long long strtoull(const char *nptr, char **endptr, int base);

Convertit une chaîne en unsigned long long, en détectant les erreurs.

p5 (introduction), p5e3, p5e9

rand_r

int rand_r(unsigned int *seedp);

Comme rand, avec une graine fournie par l’appelant (utilisable par plusieurs threads).

p5e8

<string.h>

Fonction

Signature

Rôle

Exercice

strncmp

int strncmp(const char *s1, const char *s2, size_t n);

Compare au plus les n premiers caractères de deux chaînes.

p6e3, p6e4, p6e5, p6e6

strchr

char *strchr(const char *s, int c);

Cherche la première occurrence d’un caractère dans une chaîne.

p6e4, p6e5, p6e6

strtok

char *strtok(char *str, const char *delim);

Découpe une chaîne en morceaux selon des séparateurs (la chaîne est modifiée).

p4e8

<ctype.h>

Fonction

Signature

Rôle

Exercice

toupper

int toupper(int c);

Convertit un caractère en majuscule.

p6e3

tolower

int tolower(int c);

Convertit un caractère en minuscule.

p6e3

<time.h>

Fonction

Signature

Rôle

Exercice

clock_gettime

int clock_gettime(clockid_t clockid, struct timespec *tp);

Lit une horloge (par exemple CLOCK_MONOTONIC) à la nanoseconde près.

p5 (introduction), p5e9

ctime

char *ctime(const time_t *timep);

Convertit un time_t en date lisible (chaîne terminée par \n).

p6e3

ctime_r

char *ctime_r(const time_t *timep, char *buf);

Comme ctime, dans un buffer fourni par l’appelant (utilisable par plusieurs threads).

p6e4

localtime

struct tm *localtime(const time_t *timep);

Décompose un time_t en struct tm (heure locale).

p6e6

localtime_r

struct tm *localtime_r(const time_t *timep, struct tm *result);

Comme localtime, dans une structure fournie par l’appelant (utilisable par plusieurs threads).

p6e6

strftime

size_t strftime(char *s, size_t max, const char *format, const struct tm *tm);

Écrit une date (struct tm) dans une chaîne selon un format.

p6e6

nanosleep

int nanosleep(const struct timespec *req, struct timespec *rem);

Suspend le thread pendant une durée précise (secondes et nanosecondes).

p5e8

<sys/stat.h>

Fonction

Signature

Rôle

Exercice

mkdir

int mkdir(const char *pathname, mode_t mode);

Crée un répertoire.

p2e10

<unistd.h>

Fonction

Signature

Rôle

Exercice

access

int access(const char *pathname, int mode);

Teste l’existence d’un fichier ou les droits du processus sur ce fichier.

p2e6

link

int link(const char *oldpath, const char *newpath);

Crée un lien physique vers un fichier.

p2e10

symlink

int symlink(const char *target, const char *linkpath);

Crée un lien symbolique vers un fichier.

p2e10

chdir

int chdir(const char *path);

Change le répertoire courant du processus.

p4e8