fork() in C?
In meinem Code führe ich zuerst printf("A") aus und danach fork(). Der neue Kindprozess sollte also eigentlich nicht das printf ausführen, weil er erst danach erzeugt wird. Warum wird das A bei mir dann 2x ausgegeben?
3 Antworten
![](https://images.gutefrage.net/media/default/user/12_nmmslarge.png?v=1551279448000)
Das ist der Output
![- (Java, Linux, Code)](https://images.gutefrage.net/media/fragen-antworten/bilder/554170841/0_big.png?v=1721507669000)
![](https://images.gutefrage.net/media/default/user/9_nmmslarge.png?v=1551279448000)
int main() {
printf("A");
fflush(stdout);
fork();
return 0;
}
Mit fflush() sollte das problem gelöst sein.
![](https://images.gutefrage.net/media/default/user/12_nmmslarge.png?v=1551279448000)
![](https://images.gutefrage.net/media/default/user/5_nmmslarge.png?v=1438863662000)
Ich versuche mal die eigentliche Frage zu beantworten:
fork() erzeugt (vereinfacht) einen exakten Klon des Prozessimages, so auch der Filedeskriptoren, den damit assoziierten Puffern (der C-Bibliothek) etc. pp. printf() ist nichts anderes als ein fprintf in den STDOUT, printf() schreibt also in den Ausgabestream. Wird dieser nun nach dem printf() geklont, ist er in beiden Prozessen mit 'A' gefüllt.
Daher führt das Flushen des Ausgabestreams zum gewünschten Ergebnis. Ebenso könnte man noch vor dem printf einfach das Buffering abschalten, was den gleichen Effekt haben dürfte.