因此,我一直在尝试理解fork,虽然我理解基本知识(即,另一个进程是通过原始副本创建的数据当我们使用fork()
时),我无法真正掌握这些创建的流程。如何利用每个进程在C中使用两个fork()时使用C
例如:我必须编写一个程序,该程序将调用fork()
两次,共创建4个进程。当创建一个进程时,我必须用getpid()
打印出pid
。在打印出四个ID之后,我的程序应该打印一个字母10次。例如,家长1将打印'A',孩子1将打印'B',孩子2将打印'C',并且其父母将打印'D'。为此,我必须使用putchar(ch);
并使用fflush(stdout)
来刷新输出。
这意味着输出将是这样的:
Process created, ID: 3856
Process created, ID: 3857
Process created, ID: 3858
Process created, ID: 3859
AAAAAABBBBBBBCDCDCDCDCDCDCBBBDCDCAAAADCD
到目前为止,我已经收到了四道工序,使用此代码打印:
int main(void) {
pid_t child1, child2;
child1 = fork();
child2 = fork();
printf("Process created. ID: %d\n", getpid());
}
但我不知道如何使用wait()
将所有内容随机打印出来,然后打印完ID。
为了获得我需要打印出来的一切,使其成为一个“随机混乱”,我该怎么办?我应该调用这样的函数吗?
// in main
for(int i = 0; i < 10; ++i) {
char_parent1();
char_child1();
char_parent2();
char_child2();
}
return 0;
}
void char_parent1()
{
putchar('A');
fflush(stdout);
}
void char_child1()
{
putchar('B');
fflush(stdout);
}
// and so on for char_parent2() and char_child2()
在这种情况下,如果我的教授说我必须基本打印出来的东西同时,随机,那么我为什么要使用wait()
?
那么你在哪里打印字符?发布代码 –
阅读[高级Linux编程](http://advancedlinuxprogramming.com/),它有几个章节来回答你的问题。 –
@simon_xia我添加了一个我认为我应该做的例子..可能。 – Alex