NOM
brk, sbrk - Modifier la taille du segment de données
SYNOPSIS
#include <unistd.h>
int brk(void *addr);
void *sbrk(intptr_t increment);
Exigences de macros de test de fonctionnalités pour la glibc (voir
feature_test_macros(7)) :
brk(), sbrk() : _BSD_SOURCE || _SVID_SOURCE || _XOPEN_SOURCE >=500
brk() et sbrk() modifient l’emplacement de l’interruption de programme,
qui définit la fin du segment de données du processus (c’est-à-dire,
l’interruption de programme est l’endroit juste à la fin du segment de
données non initialisé). Augmenter l’interruption de programme a pour
effet d’allouer de la mémoire au processus ; la diminuer à pour effet
de désallouer de la mémoire.
brk() positionne la fin du segment de données (le premier mot mémoire
hors de la zone accessible) à l’adresse spécifiée par addr. Cette
valeur doit être raisonnable, le système doit avoir suffisamment de
mémoire, et le processus ne doit pas dépasser sa taille maximale de
segment de données (voir setrlimit(2)).
sbrk() incrémente l’espace de données du programme de increment octets.
Appeler sbrk() avec un increment nul permet d’obtenir l’emplacement de
la limite actuelle.
VALEUR RENVOYÉE
S’il réussit, brk() renvoie zéro. En cas d’erreur, il renvoie -1 et
remplit errno avec ENOMEM (voir la section Notes sur Linux ci‐dessous).
S’il réussit, sbrk() renvoie l’interruption de programme précédente.
(Si la limite a été augmentée, cette valeur est un pointeur sur le
début de la nouvelle zone de données). En cas d’échec, (void *) -1 est
renvoyé et errno contient le code d’erreur ENOMEM.
CONFORMITÉ
BSD 4.3 ; SUSv1, considéré comme historique dans SUSv2, supprimé dans
POSIX.1-2001.
NOTES
Évitez d’utiliser brk() et sbrk() : la fonction d’allocation mémoire
malloc(3) est une méthode portable et confortable d’allouer de la
mémoire.
Différents systèmes utilisent différents types comme paramètres à
sbrk(). Les plus courants sont int, ssize_t, ptrdiff_t, intptr_t.
Notes sur Linux
La valeur de retour décrite ci‐dessus pour brk() est le comportement de
la fonction de glibc autour de l’appel système brk() de Linux. (Sur la
plupart des autres implémentations, la valeur de retour de brk() est la
même ; cette valeur de retour est également spécifiée par SUSv2.)
Cependant, l’appel système Linux lui‐même renvoie la nouvelle limite du
segment de données. En cas d’échec, l’appel système renvoie la limite
actuelle. La fonction enveloppe de la glibc fait le nécessaire
(c’est-à-dire vérifie que la nouvelle limite est inférieure à addr)
pour renvoyer les valeurs de retour 0 et -1 décrites plus haut.
Sous Linux, sbrk() est implémenté comme une fonction de bibliothèque
utilisant l’appel système brk(), et fait certains calculs internes pour
pouvoir renvoyer l’ancienne valeur de la limite.
VOIR AUSSI
execve(2), getrlimit(2), end(3), malloc(3)
COLOPHON
Cette page fait partie de la publication 3.23 du projet man-pages
Linux. Une description du projet et des instructions pour signaler des
anomalies peuvent être trouvées à l’adresse
http://www.kernel.org/doc/man-pages/.
TRADUCTION
Cette page de manuel a été traduite et mise à jour par Christophe
Blaess <http://www.blaess.fr/christophe/> entre 1996 et 2003, puis par
Alain Portal <aportal AT univ-montp2 DOT fr> jusqu’en 2006, et mise à
disposition sur http://manpagesfr.free.fr/.
Les mises à jour et corrections de la version présente dans Debian sont
directement gérées par Julien Cristau <jcristau@debian.org> et l’équipe
francophone de traduction de Debian.
Veuillez signaler toute erreur de traduction en écrivant à
<debian-l10n-french@lists.debian.org> ou par un rapport de bogue sur le
paquet manpages-fr.
Vous pouvez toujours avoir accès à la version anglaise de ce document
en utilisant la commande « man -L C <section> <page_de_man> ».