Linux, Pipes...hilfe



  • hallo,
    ich möchte gerne 2 kinder untereinander kommunizieren lassen. Kind 1 soll Kind 2 etws senden und dieses soll das empfangen ausgeben. das parent soll dabei keine rolle übernehmen.

    leider hab ich das problem das der read() meines zweiten kindes nicht blockierend ist, der rauscht also durch und es findet keine synchronisation statt.

    kann mir wer erklären ws ich falsch mache? damit kind 1 -> kind2 etwas schicken kann und dieses das dann ausgibt

    #include <stdlib.h>
    #include <stdio.h>
    #include <string.h>
    #include <unistd.h>
    
    int main(int argc, char ** argv)
    {
    	int d[2];
    	pipe(d);
    
    	int f = fork();
    
    	if (f==0)
    	{
    		printf("Code eingeben: ");
    		char c;
    		scanf("%c", &c);
    		printf("Eingelesen %c\n", c);
    		close(d[1]); /* Lese-Kanal schließen */
    		write(d[0], &c, 1);
    		close(d[0]);
    	}
    	else if (fork() == 0)
    	{
    		close(d[0]); /* Schreiben Kanal schließen */
    		char c;
    		read(d[1], &c, 1); /* leider kein blockierender read, wieso?*/
    		printf("Erhalte Code: %d\n", c);
    	}
    	else if (f > 0)
    	{
    		printf("Parent closes his lines\n");
    		close(d[0]);
    		close(d[1]);
    		wait(0);
    		printf("Kind 1 ist tot\n");
    		wait(0);
    		printf("Kinder sind tot\n");
    	}
    
    	return 0;
    }
    


  • Hi,

    vielleicht hilft Dir diese Seite weiter,
    dort wird Dein Beispiel erläutert.

    http://tldp.org/LDP/lpg/node11.html

    Gruss

    P.S.: wahrscheinlich kennst Du die Seite auch schon.



  • nein kannte ich nicht, danke hat geholfen.

    ich hab die filedeskriptoren verwechselt. 0 ist für lesen, 1 für schreiben -.-

    danke!


Anmelden zum Antworten