struct Bereich nach fork() noch bekannt?
-
Ich denke ich hau mal nen pseude Code rein wie ich das meine, wollte es testen aber Partner hat das SSH Pass geändert und kommt erst Donnerstag wieder, der Lurch ^^
typedef struct _mystruct { int wert1; int wert2; int wert3; } MyStruct; static MyStruct ms; ms.wert1 = 0; ms.wert2 = 0; ms.wert3 = 0; .... switch( fork() ) { case 0: while (ms.wert1 < 10) { printf("ich bin der Klone\n); sleep(2); ms.wert1++; } _exit(0); case -1: exit(1); default: while (!ms.wert1 != 6) {/* do nothing */} printf("und ich bin der Vater und 6 ist da\n"); exit(0); }
ich sage jetzt mal ganz grob, ich speicher einen Zeiger auf die struct, dessen wert vor fork() gesetzt ist, dieser geht mit über in den Child_Prozess und so habe ich auch zugriff, oder liege ich da falsch?
-
Wenn der Prozess geklont wird, betrifft das natürlich auch die Daten. Du hast danach also zweimal die Struktur im Speicher, und jeder Prozess kann nur auf seine eigene Kopie zugreifen. Wie Prozesse kommunizieren steht z.B. im Stevens.
-
Bashar schrieb:
Wenn der Prozess geklont wird, betrifft das natürlich auch die Daten. Du hast danach also zweimal die Struktur im Speicher, und jeder Prozess kann nur auf seine eigene Kopie zugreifen. Wie Prozesse kommunizieren steht z.B. im Stevens.
Ich kenne nur Rüdiger, wer ist Steven ^^
Spass bei seite, hätte gern mehr infos oder links.wie ist es aber, wenn ich die Speicheradresse der struct mit in den Klone übernehme, so müßte ich doch drauf zugreifen können, oder erechnet "fork()" das wiederum um, das kann ich mir nicht vorstellen, und selbst wenn ich die Adresse in einem Long schreibe und später caste, sowas müßte doch möglich sein, oder nicht?
-
datMicha schrieb:
Bashar schrieb:
Wenn der Prozess geklont wird, betrifft das natürlich auch die Daten. Du hast danach also zweimal die Struktur im Speicher, und jeder Prozess kann nur auf seine eigene Kopie zugreifen. Wie Prozesse kommunizieren steht z.B. im Stevens.
Ich kenne nur Rüdiger, wer ist Steven ^^
Spass bei seite, hätte gern mehr infos oder links.Du kennst mich?
W. Richard Stevens hat die Standard Werke zu Unix geschrieben.
wie ist es aber, wenn ich die Speicheradresse der struct mit in den Klone übernehme, so müßte ich doch drauf zugreifen können, oder erechnet "fork()" das wiederum um, das kann ich mir nicht vorstellen, und selbst wenn ich die Adresse in einem Long schreibe und später caste, sowas müßte doch möglich sein, oder nicht?
Die Adressen bleiben gleich. Bei heutigen Systemen wird der Speicher sogar erst kopiert, wenn du schreibend auf ihn zugreifst (Copy-on-Write, kurz COW).
-
rüdiger schrieb:
Die Adressen bleiben gleich. Bei heutigen Systemen wird der Speicher sogar erst kopiert, wenn du schreibend auf ihn zugreifst (Copy-on-Write, kurz COW).
Und nach dem kopieren ist die Adresse immer noch gleich
Die virtuelle Adresse natürlich.
-
Bashar schrieb:
rüdiger schrieb:
Die Adressen bleiben gleich. Bei heutigen Systemen wird der Speicher sogar erst kopiert, wenn du schreibend auf ihn zugreifst (Copy-on-Write, kurz COW).
Und nach dem kopieren ist die Adresse immer noch gleich
Die virtuelle Adresse natürlich.
Ja, weil es zwei getrennte Prozesse sind, mit einem getrennten Adress-Raum.