que para limpiar libreria funcion flushall c unix stdin

c - limpiar - libreria para fflush stdin



Leyendo de stdin (2)

De la lectura del hombre :

#include <unistd.h> ssize_t read(int fd, void *buf, size_t count);

Parámetros de entrada:

  • int fd descriptor de archivo es un entero y no un puntero de archivo. El descriptor de archivo para stdin es 0

  • void *buf puntero a búfer para almacenar caracteres leídos por la función de read

  • size_t count número máximo de caracteres para leer

Para que puedas leer personaje por personaje con el siguiente código:

char buf[1]; while(read(0, buf, sizeof(buf))>0) { // read() here read from stdin charachter by character // the buf[0] contains the character got by read() .... }

¿Cuáles son las formas posibles de leer la entrada de usuario utilizando la llamada al sistema read() en Unix? ¿Cómo podemos leer de stdin byte a byte usando read() ?


Puedes hacer algo como esto para leer 10 bytes:

char buffer[10]; read(STDIN_FILENO, buffer, 10);

recuerda que read() no agrega ''/0'' para terminar y hacer que sea una cadena (solo da un búfer en bruto).

Para leer 1 byte a la vez:

char ch; while(read(STDIN_FILENO, &ch, 1) > 0) { //do stuff }

y no olvide #include <unistd.h> , STDIN_FILENO definido como macro en este archivo.

Hay tres descriptores de archivo POSIX estándar, correspondientes a las tres secuencias estándar, que presumiblemente todos los procesos deberían esperar tener:

Integer value Name 0 Standard input (stdin) 1 Standard output (stdout) 2 Standard error (stderr)

Así que en lugar de STDIN_FILENO puedes usar 0.

Editar:
En el sistema Linux puede encontrar esto usando el siguiente comando:

$ sudo grep ''STDIN_FILENO'' /usr/include/* -R | grep ''define'' /usr/include/unistd.h:#define STDIN_FILENO 0 /* Standard input. */

Note el comentario /* Standard input. */ /* Standard input. */