2016-04-06 21 views
0

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 
+1

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

Antwort

0
  1. Ausgabe Ihrer Schließen der Datei ist,

Sie können dies versuchen oder einen anderen Prozess Gabel und die Datei lesen, die vor allem deshalb genannt fifos werden für die Kommunikation zwischen Prozessen verwendet

Dieser Link erklärt ausführlich How to send a simple string between two programs using pipes?

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)); 

printf("read %d byte\n",read(fd, str, 6)); 

close(fd); 

unlink("myfifo");