add exercise of lab5 spoc discussion
This commit is contained in:
37
related_info/lab5/lab5-spoc-discuss/user/forktree.c
Normal file
37
related_info/lab5/lab5-spoc-discuss/user/forktree.c
Normal file
@@ -0,0 +1,37 @@
|
||||
#include <ulib.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
#define DEPTH 4
|
||||
|
||||
void forktree(const char *cur);
|
||||
|
||||
void
|
||||
forkchild(const char *cur, char branch) {
|
||||
char nxt[DEPTH + 1];
|
||||
|
||||
if (strlen(cur) >= DEPTH)
|
||||
return;
|
||||
|
||||
snprintf(nxt, DEPTH + 1, "%s%c", cur, branch);
|
||||
if (fork() == 0) {
|
||||
forktree(nxt);
|
||||
yield();
|
||||
exit(0);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
forktree(const char *cur) {
|
||||
cprintf("%04x: I am '%s'\n", getpid(), cur);
|
||||
|
||||
forkchild(cur, '0');
|
||||
forkchild(cur, '1');
|
||||
}
|
||||
|
||||
int
|
||||
main(void) {
|
||||
forktree("");
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user