getrandom — get
    random data
Standard C Library (libc, -lc)
#include
    <sys/random.h>
ssize_t
  
  getrandom(void
    *buf, size_t
    buflen, unsigned int
    flags);
getrandom()
    fills buf with up to buflen
    bytes of random data.
The flags argument may include zero or more
    of the following:
  - ‘GRND_NONBLOCK’
- Return EAGAINinstead of blocking, if the
      random(4)
      device has not yet been seeded. By default,getrandom()
      will block until the device is seeded.
- ‘GRND_RANDOM’
- This flag does nothing on FreeBSD.
      /dev/random and
      /dev/urandom are identical.
- ‘GRND_INSECURE’
- This flag is treated as an alternative name for
      GRND_NONBLOCK. It is provided solely for API
      compatibility with Linux.
If the
    random(4)
    device has been seeded, reads of up to 256 bytes will always return as many
    bytes as requested and will not be interrupted by signals.
Upon successful completion, the number of bytes which were
    actually read is returned. For requests larger than 256 bytes, this can be
    fewer bytes than were requested. Otherwise, -1 is returned and the global
    variable errno is set to indicate the error.
The getrandom() operation returns the
    following errors:
  - [EAGAIN]
- The ‘GRND_NONBLOCK’ (or
      ‘GRND_INSECURE’) flag was set and
      the
      random(4)
      device was not yet seeded.
- [EFAULT]
- The buf parameter points to an invalid address.
- [EINTR]
- The sleep was interrupted by a signal.
- [EINVAL]
- An invalid flags was specified.
- [EINVAL]
- The requested buflen was larger than
      IOSIZE_MAX.
getrandom() is non-standard. It is present
    in Linux.
The getrandom() system call first appeared
    in FreeBSD 12.0.
Unlike Linux, the GRND_INSECURE flag on
    FreeBSD does not produce any output before the
    random(4)
    device is seeded.