Pregunta

Este es el código:

  unsigned int number;
  FILE* urandom = fopen("/dev/urandom", "r");
  if (urandom) {
    size_t bytes_read = fread(&number, 1, sizeof(number), urandom);
    DCHECK(bytes_read == sizeof(number));
    fclose(urandom);
  } else {
    NOTREACHED();
  }

Si no es así, ¿cómo lo hago seguro para subprocesos?

¿Fue útil?

Solución

Siempre que cada ejecución de la función esté en su propio hilo (es decir, las variables locales number , urandom , bytes_read no están compartido entre hilos), no veo ningún problema de seguridad de hilos. Cada hilo tendrá su propio descriptor de archivo en / dev / urandom . / dev / urandom se puede abrir simultáneamente desde múltiples procesos, así que está bien.

Por cierto, / dev / urandom puede fallar al abrir, y su código debe lidiar con eso. Algunas causas son: quedarse sin descriptores de archivo disponibles; / dev no está montado correctamente (aunque en este caso tiene problemas mayores); su programa se ejecuta en un chroot especial que niega el acceso a cualquier dispositivo; etc.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top