diff options
Diffstat (limited to '')
| -rw-r--r-- | src/lib/libc/stdlib/rand.3 | 76 | 
1 files changed, 49 insertions, 27 deletions
| diff --git a/src/lib/libc/stdlib/rand.3 b/src/lib/libc/stdlib/rand.3 index 5d4bfe7ab6..c760161ba7 100644 --- a/src/lib/libc/stdlib/rand.3 +++ b/src/lib/libc/stdlib/rand.3 | |||
| @@ -29,52 +29,65 @@ | |||
| 29 | .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | 29 | .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | 
| 30 | .\" SUCH DAMAGE. | 30 | .\" SUCH DAMAGE. | 
| 31 | .\" | 31 | .\" | 
| 32 | .\" $OpenBSD: rand.3,v 1.17 2014/11/25 17:41:12 millert Exp $ | 32 | .\" $OpenBSD: rand.3,v 1.18 2014/12/08 21:45:20 deraadt Exp $ | 
| 33 | .\" | 33 | .\" | 
| 34 | .Dd $Mdocdate: November 25 2014 $ | 34 | .Dd $Mdocdate: December 8 2014 $ | 
| 35 | .Dt RAND 3 | 35 | .Dt RAND 3 | 
| 36 | .Os | 36 | .Os | 
| 37 | .Sh NAME | 37 | .Sh NAME | 
| 38 | .Nm rand , | 38 | .Nm rand , | 
| 39 | .Nm rand_r , | 39 | .Nm rand_r , | 
| 40 | .Nm srand | 40 | .Nm srand , | 
| 41 | .Nm srand_deterministic | ||
| 41 | .Nd bad pseudo-random number generator | 42 | .Nd bad pseudo-random number generator | 
| 42 | .Sh SYNOPSIS | 43 | .Sh SYNOPSIS | 
| 43 | .In stdlib.h | 44 | .In stdlib.h | 
| 44 | .Ft void | 45 | .Ft void | 
| 45 | .Fn srand "unsigned int seed" | 46 | .Fn srand "unsigned int seed" | 
| 47 | .Ft void | ||
| 48 | .Fn srand_deterministic "unsigned int seed" | ||
| 46 | .Ft int | 49 | .Ft int | 
| 47 | .Fn rand void | 50 | .Fn rand void | 
| 48 | .Ft int | 51 | .Ft int | 
| 49 | .Fn rand_r "unsigned int *seed" | 52 | .Fn rand_r "unsigned int *seed" | 
| 50 | .Sh DESCRIPTION | 53 | .Sh DESCRIPTION | 
| 51 | .Bf -symbolic | 54 | .Bf -symbolic | 
| 52 | These interfaces are obsoleted by | 55 | Standards insist that this interface return deterministic results. | 
| 53 | .Xr random 3 , | 56 | Unsafe usage is very common, so | 
| 54 | which is also unsafe. | 57 | .Ox | 
| 55 | Consider using | 58 | changed the subsystem to return non-deterministic results by default. | 
| 56 | .Xr arc4random 3 . | ||
| 57 | .Ef | 59 | .Ef | 
| 58 | .Pp | 60 | .Pp | 
| 59 | The | 61 | To satisfy portable code, | 
| 62 | .Fn srand | ||
| 63 | may be called to initialize the subsystem. | ||
| 64 | In | ||
| 65 | .Ox | ||
| 66 | the | ||
| 67 | .Ar seed | ||
| 68 | variable is ignored, and strong random number results will be provided from | ||
| 69 | .Xr arc4random 3. | ||
| 70 | In other systems, the | ||
| 71 | .Ar seed | ||
| 72 | variable primes a simplistic deterministic algorithm. | ||
| 73 | .Pp | ||
| 74 | If the standardized behavior is required | ||
| 75 | .Fn srand_deterministic | ||
| 76 | can be substituted for | ||
| 77 | .Fn srand , | ||
| 78 | then subsequent | ||
| 60 | .Fn rand | 79 | .Fn rand | 
| 61 | function computes a sequence of pseudo-random integers in the range | 80 | calls will return results using the deterministic algorithm. | 
| 62 | of 0 to | ||
| 63 | .Dv RAND_MAX | ||
| 64 | (as defined by the header file | ||
| 65 | .In stdlib.h ) . | ||
| 66 | .Pp | 81 | .Pp | 
| 67 | The | 82 | The | 
| 68 | .Fn srand | 83 | .Fn rand | 
| 69 | function sets its argument as the seed for a new sequence of | 84 | function returns a result in the range of 0 to | 
| 70 | pseudo-random numbers to be returned by | 85 | .Dv RAND_MAX . | 
| 71 | .Fn rand . | 86 | By default, this result comes from | 
| 72 | These sequences are repeatable by calling | 87 | .Xr arc4random 3 . | 
| 73 | .Fn srand | 88 | If | 
| 74 | with the same seed value. | 89 | .Fn srand_deterministic | 
| 75 | .Pp | 90 | was called, the result will be computed using the deterministic algorithm. | 
| 76 | If no seed value is provided, the functions are automatically | ||
| 77 | seeded with a value of 1. | ||
| 78 | .Pp | 91 | .Pp | 
| 79 | The | 92 | The | 
| 80 | .Fn rand_r | 93 | .Fn rand_r | 
| @@ -83,6 +96,7 @@ is a thread-safe version of | |||
| 83 | Storage for the seed must be provided through the | 96 | Storage for the seed must be provided through the | 
| 84 | .Fa seed | 97 | .Fa seed | 
| 85 | argument, and needs to have been initialized by the caller. | 98 | argument, and needs to have been initialized by the caller. | 
| 99 | It always operates using the deterministic algorithm. | ||
| 86 | .Sh SEE ALSO | 100 | .Sh SEE ALSO | 
| 87 | .Xr arc4random 3 , | 101 | .Xr arc4random 3 , | 
| 88 | .Xr rand48 3 , | 102 | .Xr rand48 3 , | 
| @@ -90,15 +104,23 @@ argument, and needs to have been initialized by the caller. | |||
| 90 | .Sh STANDARDS | 104 | .Sh STANDARDS | 
| 91 | The | 105 | The | 
| 92 | .Fn rand | 106 | .Fn rand | 
| 93 | and | 107 | function conforms to | 
| 94 | .Fn srand | ||
| 95 | functions conform to | ||
| 96 | .St -ansiC . | 108 | .St -ansiC . | 
| 97 | .Pp | 109 | .Pp | 
| 98 | The | 110 | The | 
| 99 | .Fn rand_r | 111 | .Fn rand_r | 
| 100 | function conforms to | 112 | function conforms to | 
| 101 | .St -p1003.1-2008 . | 113 | .St -p1003.1-2008 . | 
| 114 | .Pp | ||
| 115 | The | ||
| 116 | .Fn srand | ||
| 117 | function does not conform to | ||
| 118 | .St -ansiC , | ||
| 119 | intentionally. | ||
| 120 | .Pp | ||
| 121 | The | ||
| 122 | .Fn srand_deterministic | ||
| 123 | function is an OpenBSD extension. | ||
| 102 | .Sh HISTORY | 124 | .Sh HISTORY | 
| 103 | The functions | 125 | The functions | 
| 104 | .Fn rand | 126 | .Fn rand | 
