Aktywne Wpisy

straszny_cham +16
#linux #bekazlinuksiarzy
Widzę że po dwudziestu latach dalej ten guwnosystem nie działa dobrze bez grzebania w terminalu?
Widzę że po dwudziestu latach dalej ten guwnosystem nie działa dobrze bez grzebania w terminalu?

walokid +104





$ cat ./a.c#include
main()
{
fork();
printf("%d\n",getpid());
fork();
printf("%d\n",getpid());
}
Dlaczego po skompilowaniu i uruchomieniu tego kodu w bashu dostaję 6 wyników, a po przekierowaniu tego gdziekolwiek dostaję 8 wyników?
$ gcc ./a.c$ ./a.out
5015
5015
5016
5017
5016
5018
$ ./a.out | wc -l
8
$ ./a.out | cat
5064
5064
5066
5066
5064
5067
5066
5068
#jezykc #programowanie #linux
1) zostaje wywołany pierwszy fork() i wypisuje ci pierwszego prinfa; zostaje stworzony proces potomny
2) zostaje wywołany drugi fork() i wypisuje ci
@Kryspin013: I tak jak Napisał @ImReally powinieneś sprawdzać wynik forka i w ten sposób sterować co ma wykonać który proces.
fork
print1 print2
fork
print1 print12 print2 print22
Wyniki wynikają z różnicy buforowania na terminalu i pipe. Te dwie dodatkowe linie wynikają ze zlepienia z poprzedniego bufora printfa. Wrzuć po każdym printfie fflush(stdout);
Kolejność wygląda mniej więcej tak:
fork()
___