Anzeige:
Ergebnis 1 bis 2 von 2

Thema: pipe, fork, scanf...

  1. #1
    Registrierter Benutzer
    Registriert seit
    19.06.2003
    Beiträge
    27

    pipe, fork, scanf...

    Hallo,
    ich habe folgendes Problem....

    Ich versuche beliebige viele Zahlenpaar über die Tastatur einzugeben (Vaterprozess)...

    und diese sollen vom Tochterprozess (pid==0) ausgeben werden...

    Code:
    pid=fork(); 
    	
    if (pid == 0)
    	{close(fd[1]);
    		 if ((fd_r = fdopen(fd[0],"r"))==NULL)
    		{
    		printf("fdopen: %s", strerror(errno));
    		exit(2);
    		} 
    	while(fscanf(fd_r,"%d%d",&x,&y) != EOF)
    		{
    		printf("(Test) x: %d, y: %d\n",x,y);
    		} 	
    	return 2;
    	}
    gibt mir nur das letzte Zahlenpaar aus... dieses allerdings sooft bis ich abbreche.... (die Ausgaben beendet sich nicht selber)

    wenn ich allerdings mit "if" die Ausgabe etwas beschränke

    Code:
    		while(fscanf(fd_r,"%d%d",&x,&y) != EOF)
    			{
    			c++;
    			printf("%d, (Test) x: %d, y: %d\n",c,x,y);
    			if (c>20) exit(3);
    			}
    gibt er den Anfang richtig aus.... und dann

    1, (Test) x: 2, y: 4
    2, (Test) x: 1, y: 3
    3, (Test) x: 4, y: 5
    4, (Test) x: 7, y: 8
    5, (Test) x: 7, y: 8
    6, (Test) x: 7, y: 8
    7, (Test) x: 7, y: 8
    8, (Test) x: 7, y: 8
    9, (Test) x: 7, y: 8
    10, (Test) x: 7, y: 8
    11, (Test) x: 7, y: 8
    12, (Test) x: 7, y: 8
    13, (Test) x: 7, y: 8
    14, (Test) x: 7, y: 8
    15, (Test) x: 7, y: 8
    16, (Test) x: 7, y: 8
    17, (Test) x: 7, y: 8
    18, (Test) x: 7, y: 8
    19, (Test) x: 7, y: 8
    20, (Test) x: 7, y: 8
    21, (Test) x: 7, y: 8



    aber wie gelingt es mir, dass er jedes Zahlenpaar nur einmal ausgibt, bzw. am Schluss diese Endlosschleife nicht erscheint...?


    Ruga

  2. #2
    Registrierter Benutzer
    Registriert seit
    10.10.2005
    Beiträge
    39
    solange dein vaterprozess noch laeuft, ist der stream gueltig, also erhaelst du kein EOF.

    da du in 'ner endlosschleife steckst und deine variablen nicht neu initialisierst, schreibst du immer die zuletzt erfolgreich gelesenen werte raus.

    pruefe das fscanf auch auf 0 (bzw !=2) und initialisieren deine variablen vor jedem scan.

    pipes in interaktiven programmen halte ich aber ehrlich gesagt fuer 'ne schnapsidee...

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •