rand(3) Library Functions Manual rand(3) NOM rand, rand_r, srand - Generateur de nombres pseudoaleatoires BIBLIOTHEQUE Bibliotheque C standard (libc, -lc) SYNOPSIS #include int rand(void); void srand(unsigned int graine); [[deprecated]] int rand_r(unsigned int *seedp); Exigences de macros de test de fonctionnalites pour la glibc (consulter feature_test_macros(7)) : rand_r() : Depuis la glibc 2.24 : _POSIX_C_SOURCE >= 199506L glibc 2.23 et anterieures _POSIX_C_SOURCE DESCRIPTION The rand() function returns a pseudo-random integer in the range 0 to RAND_MAX inclusive (i.e., the mathematical range [0, RAND_MAX]). La fonction srand() utilise son argument comme << graine\[u00BB] pour la generation d'une nouvelle sequence de nombres pseudoaleatoires qui seront fournis par rand(). Ces sequences sont reproductibles en appelant srand() avec la meme valeur de graine. Si aucune graine originale n'est fournie, la fonction rand() commence en utilisant la valeur 1. La fonction rand() n'est pas reentrante, car elle utilise un etat cache modifie a chaque appel. Il peut s'agir simplement de la valeur de graine aleatoire pour l'appel suivant ou de quelque chose de plus complique. Afin d'obtenir un comportement reproductible dans une application threadee, cet etat doit etre explicite ; cela peut etre fait en utilisant la fonction reentrante rand_r(). Like rand(), rand_r() returns a pseudo-random integer in the range [0, RAND_MAX]. The seedp argument is a pointer to an unsigned int that is used to store state between calls. If rand_r() is called with the same initial value for the integer pointed to by seedp, and that value is not modified between calls, then the same pseudo-random sequence will result. La valeur pointee par l'argument seedp de rand_r() ne fournit qu'une donnee tres petite pour stocker la valeur d'etat, cette fonction sera donc un generateur pseudoaleatoire faible. Essayez donc drand48_r(3) a sa place. VALEUR RENVOYEE Les fonctions rand() et rand_r() renvoient un nombre entier entre 0 et RAND_MAX, bornes incluses. La fonction srand() ne renvoie aucune valeur. ATTRIBUTS Pour une explication des termes utilises dans cette section, consulter attributes(7). +---------------------------------+--------------------------+---------+ |Interface | Attribut | Valeur | +---------------------------------+--------------------------+---------+ |rand(), rand_r(), srand() | Securite des threads | MT-Safe | +---------------------------------+--------------------------+---------+ VERSIONS Les versions de rand() et srand() de la bibliotheque C de Linux utilisent le meme generateur de nombres aleatoires que random(3) et srandom(3), ainsi les bits de poids faible sont tout aussi imprevisibles que les bits de poids fort. Ceci n'est pas le cas avec les anciennes implementations de rand() ou d'actuelles implementations sur des systemes differents, ou les bits de poids faible n'etaient pas << aussi aleatoires >> que ceux de poids fort. N'utilisez pas cette fonction dans des applications concues pour etre portables et lorsqu'un bon caractere aleatoire est necessaire. (Utilisez plutot random(3)) NORMES rand_() srand() C11, POSIX.1-2008. rand_r() POSIX.1-2008. HISTORIQUE rand_() srand() SVr4, 4.3BSD, C89, POSIX.1-2001. rand_r() POSIX.1-2001. Obsolete dans POSIX.1-2008. EXEMPLES POSIX.1-2001 fournit l'exemple suivant d'une implementation de rand() et srand() potentiellement utile lorsqu'on a besoin de la meme sequence sur deux machines differentes. static unsigned long next = 1; /* RAND_MAX suppose etre egal a 32767 */ int mon_rand(void) { suivant = suivant * 1103515245 + 12345; return((unsigned) (suivant/65536) % 32768); } void mon_srand(unsigned int graine) { suivant = graine; } Le programme suivant peut etre utilise pour afficher la sequence pseudoaleatoire produite par rand() avec une graine donnee. Quand la graine est -1, le programme utilise une graine aleatoire. #include #include int main(int argc, char *argv[]) { int r; unsigned int graine, nloops; if (argc != 3) { fprintf(stderr, "Utilisation : %s \n", argv[0]); exit(EXIT_FAILURE); } seed = atoi(argv[1]); nloops = atoi(argv[2]); if (seed == -1) { seed = arc4random(); printf("graine : %u\n", graine); } srand(graine); for (unsigned int j = 0; j < nloops; j++) { r = rand(); printf("%d\n", r); } exit(EXIT_SUCCESS); } VOIR AUSSI drand48(3), random(3) TRADUCTION La traduction francaise de cette page de manuel a ete creee par Christophe Blaess , Stephan Rafin , Thierry Vignaud , Francois Micaux, Alain Portal , Jean-Philippe Guerard , Jean-Luc Coulon (f5ibh) , Julien Cristau , Thomas Huriaux , Nicolas Francois , Florentin Duneau , Simon Paillard , Denis Barbier , David Prevot et bubu Cette traduction est une documentation libre ; veuillez vous reporter a la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITE LEGALE. Si vous decouvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message a . Pages du manuel de Linux 6.18 8 fevrier 2026 rand(3)