rand(3) Library Functions Manual rand(3) rand, rand_r, srand - (libc -lc) #include int rand(void); void srand(unsigned int seed); [[deprecated]] int rand_r(unsigned int *seedp); glibc ( feature_test_macros(7)): rand_r(): glibc 2.24: _POSIX_C_SOURCE >= 199506L glibc 2.23 : _POSIX_C_SOURCE rand() 0 RAND_MAX ( [0, RAND_MAX]). srand() rand(). srand() . rand() 1. rand() . . rand_r(). rand() rand_r() [0, RAND_MAX]. seedp unsigned int . rand_r() seedp . seedp rand_r() . drand48_r(3) . rand() rand_r() 0 RAND_MAX (). srand() . attributes(7). +------------+------------------------------------+--------------------+ || | | +------------+------------------------------------+--------------------+ |rand(), | | MT-Safe | |rand_r(), | | | |srand() | | | +------------+------------------------------------+--------------------+ rand() srand() C random(3) srandom(3) . rand() . . ( random(3) .) rand() srand() C11, POSIX.1-2008. rand_r() POSIX.1-2008. rand() srand() SVr4, 4.3BSD, C89, POSIX.1-2001. rand_r() POSIX.1-2001. POSIX.1-2008. POSIX.1-2001 rand() srand() . static unsigned long next = 1; /* RAND_MAX assumed to be 32767 */ int myrand(void) { next = next * 1103515245 + 12345; return((unsigned) (next/65536) % 32768); } void mysrand(unsigned int seed) { next = seed; } rand() . -1 . #include #include int main(int argc, char *argv[]) { int r; unsigned int seed, nloops; if (argc != 3) { fprintf(stderr, "Usage: %s \n", argv[0]); exit(EXIT_FAILURE); } seed = atoi(argv[1]); nloops = atoi(argv[2]); if (seed == -1) { seed = arc4random(); printf("seed: %u\n", seed); } srand(seed); for (unsigned int j = 0; j < nloops; j++) { r = rand(); printf("%d\n", r); } exit(EXIT_SUCCESS); } drand48(3), random(3) 3 . . : . 6.18 8 2026 rand(3)