BRK
Section : Manuel du programmeur Linux (
2)
Mise à jour de la version anglaise : 18 juin 2008
Index
Menu principal
NOM
brk, sbrk - Modifier la taille du segment de données
SYNOPSIS
#include <unistd.h>
int brk(void *addr);
void *sbrk(intptr_t incrément);
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
DESCRIPTION
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
incrément
octets.
Appeler
sbrk()
avec un
incrément
nul permet d'obtenir l'emplacement de la limite actuelle.
VALEUR RENVOYÉE
brk()
renvoie 0 s'il réussit.
En cas d'échec, -1 est renvoyé et
errno
contient le code d'erreur
ENOMEM.
(Voir
Notes Linux
plus loin.)
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 Linux
La valeur de retour décrite plus haut pour
brk()
est le comportement de la fonction enveloppe de la glibc
pour 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.)
Toutefois,
l'actuel appel système Linux renvoie la nouvelle limite
du segment de données s'il réussit.
S'il échoue, l'appel renvoie l'actuelle limite du segment de données.
La fonction enveloppe de la glibc effectue certaines instructions
(c'est-à-dire vérifie que la nouvelle limite est inférieure à
addr )
pour faire en sorte de renvoyer
les valeurs de retour 0 et -1 décrites plus haut.
Sous Linux,
sbrk()
est implémenté comme une fonction de bibliothèque qui utilise
l'appel système
brk(),
et effectue certains calculs internes afin de renvoyer
l'ancienne valeur de la limite.
VOIR AUSSI
execve(2),
getrlimit(2),
malloc(3)
TRADUCTION
Ce document est une traduction réalisée par Christophe Blaess
<http://www.blaess.fr/christophe/> le 9 octobre 1996
et révisée le 17 juillet 2008.
L'équipe de traduction a fait le maximum pour réaliser une adaptation
française de qualité. La version anglaise la plus à jour de ce document est
toujours consultable via la commande : « LANG=C man 2 brk ».
N'hésitez pas à signaler à l'auteur ou au traducteur, selon le cas, toute
erreur dans cette page de manuel.
Index
- NOM
-
- SYNOPSIS
-
- DESCRIPTION
-
- VALEUR RENVOYÉE
-
- CONFORMITÉ
-
- NOTES
-
- Notes Linux
-
- VOIR AUSSI
-
- TRADUCTION
-
Dernière mise à jour : 17 juillet 2008