Código
#include <stdio.h> #include <fcntl.h> int main(void){ mkfifo("FIFO",0777); int fd = open("FIFO",O_WRONLY); int n = 1234; write(fd,&n,sizeof(int)); close(fd); return 0; }
Y en otro, este:
Código
#include <stdio.h> #include <fcntl.h> int main(vodi){ int fd = open("FIFO",O_RDONLY); int n; read(fd,&n,sizeof(int)); read(fd,&n,sizeof(int)); close(fd); return 0; }
Ejecuto el primer programa en segundo plano, y despues el segundo programa, y la salida que generan es la siguiente:
Código:
ESCRIBIENDO DATO
DATO ESCRITO
LEYENDO DATO
DATO LEIDO: 1234
DATO LEIDO OTRA VEZ: 1234
¿Por qué lee 2 veces el mismo dato en vez de quedarse bloqueado hasta que algún otro programa vuelva a escribir en el fifo?
Es mas, ¿Por qué entre "ESCRIBIENDO DATO" y "DATO ESCRITO" hay dos lineas cuando solo imprimo una al final de cada mensaje?
¿Se os ocurre alguna forma de hacer que el programa se detenga hasta que no se escriban nuevos datos en el fifo en vez de leer 2 veces el mismo dato?