Estaba tratando de leer la entrada del terminal usando read() en un ciclo while como condición, pero el código no se ejecuta hasta que finaliza el ciclo.
Aquí está mi código:
#include<unistd.h> int main(void) { char ch; while(read(STDIN_FILENO,&ch,1) == 1 && ch != 'q') { printf("success"); } return 0; }me da la salida:
t fgr vr q successsuccesssuccesssuccesssuccesssuccesssuccesssuccesssuccesssuccessIncluso cuando trato de leer datos normalmente, los datos no leídos en el búfer terminan así.
código:
#include<unistd.h> int main(void) { char ch; read(STDIN_FILENO,&ch,1); return 0; }salida en terminal
user1@lap:~/Desktop$ ./program2e3 ted pradeep@LLP:~/Desktop$ ed¿Por qué los datos no leídos se convierten en el siguiente comando?
Debido a que los datos todavía están en el búfer IO en el kernel en lugar del búfer STDIO en su proceso, los datos no leídos serán leídos por el siguiente proceso que intente leerlos (es decir, el proceso de shell). Esto se debe a que el identificador abierto se pasó del proceso de shell a su proceso. Si hubiera abierto el dispositivo tty usted mismo, eso no habría sucedido.