【发布时间】:2022-01-09 08:46:36
【问题描述】:
我正在学习 C 语言,但我被 fork 函数和进程所困。我想创建一个获取 2 个输入(深度和宽度)的 c 程序来创建像 image 中一样的树
这是我现在完成的代码:
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include<sys/wait.h>
int
main (int argc, char *argv[])
{
int i, depth, width, pid, j, pid2;
if (argc != 3)
exit (0);
depth= atoi (argv[1]);
width = atoi (argv[2]);
for (i = 0; i < width; i++)
{
pid = fork ();
if (pid < 0)
{
printf ("Error");
exit (1);
}
else if (pid == 0)
{
for (j = 0; j < depth; j++)
{
pid2 = fork ();
if (pid2 < 0)
{
printf ("Error");
exit (1);
}
else if (pid2 == 0)
{
printf ("Child (%d): %d\n", j + 1, getpid ());
exit (0);
}
else
{
wait (NULL);
}
}
}
else
{
wait (NULL);
}
}
printf ("Child %d and parent %d\n", getpid (), getppid ());
sleep (1);
return 0;
}
【问题讨论】:
-
一棵宽度为 3 或 4 的树长什么样子?还是宽度只有 2?
-
如果您没有在错误的地方拨打您的
wait()电话,我确实会感到惊讶。让我们这样说吧——我对他们深表怀疑。 -
@JonathanLeffler 恕我直言,他们的
wait()还可以,除了他们有两个,因为他们使用两个for循环而不是一个。