* same with xv6
[mascara-docs.git] / i386 / ucla / src / lab5 / user / forktree.c
blobb340b38ee0786c30fd40f294e3932fd559913836
1 // Fork a binary tree of processes and display their structure.
3 #include <inc/lib.h>
5 #define DEPTH 3
7 void forktree(const char *cur);
9 void
10 forkchild(const char *cur, char branch)
12 char nxt[DEPTH+1];
14 if (strlen(cur) >= DEPTH)
15 return;
17 snprintf(nxt, DEPTH+1, "%s%c", cur, branch);
18 if (fork() == 0) {
19 forktree(nxt);
20 exit();
24 void
25 forktree(const char *cur)
27 cprintf("%04x: I am '%s'\n", sys_getenvid(), cur);
29 forkchild(cur, '0');
30 // Yield to give the child a chance to run.
31 // This will make child environment IDs slightly more predictable.
32 sys_yield();
33 forkchild(cur, '1');
36 asmlinkage void
37 umain(int argc, char **argv)
39 forktree("");