#include <stdio.h>
#include <unistd.h>
int main(void) {
int i = 0;
for (i = 0; i < 4; i++) {
fork();
printf("foo\n");
}
return 0;
}
Dies druckt "foo" 30 Mal. Warum?Wie funktioniert fork() hier in diesem C-Programm?
Und warum druckt es "foo" 64 mal, wenn Sie die Ausgabe pipe?
$ ./a.out | wc -l
64
Haben Sie schon versucht? – Scheff
Denken Sie daran, dass nach 'fork()' zwei Prozesse mit denselben Werten in Variablen existieren. Daher sollte in jeder Iteration der Schleife die Anzahl der Prozesse verdoppelt werden. Das ist 2 + 4 + 8 + 16 = 30. Ich würde 30 'foo's Ausgabe erwarten. Habe ich recht? (Natürlich nehme ich an, dass keiner der 'fork()' s fehlschlägt ...) – Scheff
Interessant. Ich erhalte andere Ergebnisse, wenn ich nur auf das Terminal drucke und es in eine Datei oder ein Programm wie less oder wc -l lege. Ich bekomme 64 in wc -l. –