Я экспериментировал с fork()
и перенаправлял, чтобы проверить, применяются ли повторные указания, сделанные родителем, и к ребенку. Я написал следующую простую программуЗаявление перед печатью fork() дважды
#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
int main()
{
freopen("error.txt", "w+t", stdout); // From now on, stdout = error.txt
printf (" ERROR! WHY DONT U UNDERSTAND?\n");
if (fork() == 0)
{
printf(" I AM CHILD\n");
exit(0);
}
else-
{
printf (" EITHER I AM A PARENT OR SOMETHING GOT SCREWED\n");
}
return 0;
}
Выход (error.txt
) Я получил это
ERROR! WHY DONT U UNDERSTAND?
EITHER I AM A PARENT OR SOMETHING GOT SCREWED
ERROR! WHY DONT U UNDERSTAND?
I AM CHILD
Удивительно, но ERROR! WHY DONT U UNDERSTAND?
является печать дважды даже если он появляется много до fork()
называется и должен только один раз печатается родителем.
Может ли кто-нибудь пролить свет на это?
Я не уверен в этом, но убедитесь, что вы сбросили io-буферы перед вилкой. возможно, буферы будут скопированы для ребенка. – lupz
Это сделало бы отличный вопрос для интервью! – dasblinkenlight