Wie wert an Vaterprozess übergeben?

I

iv1u2

Grünschnabel
Hi,
ich habe folgendes Problem. Ich weis nicht genau wie ich z.B. das Ergebnis einer Berechnung die in einem Kindprozess durchgeführt wurde an den Vaterprozess(Elternprozess) übergebe?

Ich möchte einen Kindprozess erzeugen, in diesem seine eigene pid mit 2 multiplizieren, den Kindprozess eigenständig terminieren und das ergebnis dieser Berechnung im elternprozess mit printf() ausgeben.

Sagen wir mal ich habe folgendes:

int pid1

pid1=fork();

if(pid<0) exit(-1);

if(pid1==0)
{
int a;
a= getpid() * 2;
}
if(pid>0)
{
//hier würde ich dann gerne das resultat von a aus dem Kindprozess ausgeben...nur wie??
}
 
Danke, hab mir jetzt ein paar Seiten angeschaut, wäre das so richtig?


int pid1;
int buffer[1];
int fd[2];

pipe(fd);
pid1=fork();

if(pid<0) exit(-1);

if(pid1==0)
{
int a;
a= getpid() * 2;
write(fd[1],a,1);
exit(0);
}
if(pid>0)
{
//ist dieser code jetzt richtig?

read(fd[0],buffer,1);
printf("\n Die doppelte PID des Kindprozesses lautet: %i \n",buffer);


}
 
Der Vater macht üblicherweise noch ein "wait(NULL)" bevor er endet, und direkt nach dem fork() schließt jeder Prozess noch das "Ende" der Pipe was er nicht benötigt - außerdem hast Du einmal pid und pid1 benutzt, ein "pid" reicht ...
Code:
if ((pid = fork()) < 0) 
    exit(-1);
if (pid==0) {
   close(fd[0]);
   ...

} else {
    close(fd[1]);
    ...

    wait(NULL);
}

Heiko
 
Zuletzt bearbeitet:
Hi,
wäre es vielleicht auch möglich das der kindprozess über eine als extern deklarierte Variable, welche im elternprozesse erzeugt wurde, einen Wert an den Elternprozess zurück liefert?
 
Hi,
wäre es vielleicht auch möglich das der kindprozess über eine als extern deklarierte Variable, welche im elternprozesse erzeugt wurde, einen Wert an den Elternprozess zurück liefert?

Nein, fork() muß Du Dir so vorstellen, das eine komplette Kopie des aktuellen Prozesses gemacht wird. Jeder kann mit seinen Variablen machen was er will.

pipe() nutzt genau dieses aus, das OS stellt einen ''" File-Handle "" zur Verfügung, der hinterher in beiden Prozessen geöffnet ist, daher können die dann Nachrichten austauschen.

pipe() kann man ja auch zweimal aufrufen (mit verschiedenen Variablen), so das man einen Hin- und einen Rückkanal hat, allerdings muß man dann aufpassen, das nicht beide lesend blockieren und sich nichts mehr tut.

Heiko
 
ok, dann kommt für mich nur pipe in Frage. Vielen Dank für die Antworten.
 

Ähnliche Themen

Unix Webserver mit HTML Seite erstellen

Bestimmte Zeilen einer Spalte addieren

Prozesskommunikation mit PIPES - wie funktioniert das?

AWK Tip gesucht

string.split() splittet zu einzelnen Buchstaben anstatt zu Wörtern

Zurück
Oben