fclose(stdin)
hace que cualquier uso adicional de stdin
(implícita o explícita) para invocar un comportamiento indefinido, que es una cosa muy mala . No "inhibe la entrada".
close(fileno(stdin))
hace que cualquier intento de entrada de stdin
, después de que el buffer actual se ha agotado, al fallar con EBADF
, pero sólo hasta que se abra otro archivo, en cuyo caso ese archivo se convertirá en fd # 0 y cosas malas pasar.
Un enfoque más robusto podría ser:
int fd = open("/dev/null", O_WRONLY);
dup2(fd, 0);
close(fd);
con algunas comprobaciones de errores añadido. Esto asegurará que todas las lecturas (después de que se agote el buffer actual) provoquen errores. Si solo desea que produzcan EOF, no un error, use O_RDONLY
en lugar de O_WRONLY
.
puede simplemente cerrar (stdin), llamará a close() en el identificador de archivo. –