Fifo Pipes
-
Hallo,
ich habe ein Problem. Und zwar habe ich 2 Programme. Das eine erzeugt ein FIFO Pipe und beschreibt es mit einer festen Botschaft.
Das 2. Programm liesst das Pipe aus. Beide Programme sollen jeweils 10 mal alle 6 Sekunden schreiben und ausgeben, dann terminieren. Anbei der Quellcode.
// liesst pipe aus und gibt es auf der Konsole aus #include <stdio.h> #include <stdlib.h> #include <fcntl.h> #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> #define BUFLEN 80 int main (void); int fdes; int count = 0; char buffer[BUFLEN],c; int main(void) { int i; if((fdes=open("pipe1",O_RDONLY))==(-1)) { printf("Failure 'open pipe'"); exit(-1); } for (i=0; i<10; i++) { read(fdes, buffer, BUFLEN); puts(buffer); sleep(6); } close(fdes); exit(0); }
und
// erzeugt und beschreibt pipe #include <stdio.h> #include <stdlib.h> #include <fcntl.h> #include <sys/types.h> #include <sys/stat.h> #define BUFLEN 80 #define EXIT__FAILURE -1 int main (void); void output(); int fdes; int a; char *s; char buffer[BUFLEN]; int i; int main(void) { mknod("pipe1",S_IFIFO | 0666,0); if((fdes=open("pipe1",O_WRONLY))==(-1)) { puts("Failure 'open pipe'"); exit(EXIT__FAILURE); } output(); close(fdes); exit(0); } void output() { int i; for (i=0; i<10; i++){ sleep(6); if((i=write(fdes, "I am alive", BUFLEN)) != BUFLEN) { printf("Failure 'write-call'"); exit(EXIT__FAILURE); } } }
Wie kann man am einfachsten eine Lösung zu diesem Problem realisieren? Das mit dem Sleep geht nicht, da beide Prozesse sich irgendwie synchronisieren müssen.
Grüße,
Hamilcar