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


Anmelden zum Antworten