Ich erstelle einen Fifo, aber ich kann nicht davon lesen. Was ist das Problem? Hier ist ein Code und eine Ausgabe. Wenn ich O_RDONLY ohne O_NONBLOCK Programm verwende, warte einfach.C kann nicht von Fifo lesen (Named Pipe)
pid_t p;
int fd;
char str[]="sample";
mkfifo("myfifo", S_IRUSR | S_IWUSR);
fd = open("myfifo", O_RDWR);
printf("write %d byte\n", write(fd, str, 5));
close(fd);
fd = open("myfifo", O_RDONLY | O_NONBLOCK);
printf("read %d byte\n",read(fd, str, 6));
close(fd);
unlink("myfifo");
Ausgang:
write 5 byte
read 0 byte
Pipes speichern keine Nachrichten. Sobald Sie den Dateideskriptor schließen, wird die Nachricht, die Sie geschrieben haben, verworfen. Rohre müssen vom Verbraucher gelesen werden, während die Produzenten schreiben. – alvits