diff options
author | Mole Shang <[email protected]> | 2024-02-11 14:44:22 +0800 |
---|---|---|
committer | Mole Shang <[email protected]> | 2024-02-11 16:06:15 +0800 |
commit | 2fe04bc8faa4bf737a86c36a8017473e84814f3b (patch) | |
tree | 2146d3dae86f21060e2e807ad364f5a949fd1c53 /user/pingpong.c | |
parent | 5ce1f630132d8b7b35b9dc46b4a55f860eb85d5c (diff) | |
parent | 48a5e34fcd07852b4a68825ce8e37feb6f6d04d7 (diff) | |
download | xv6-labs-2fe04bc8faa4bf737a86c36a8017473e84814f3b.tar.gz xv6-labs-2fe04bc8faa4bf737a86c36a8017473e84814f3b.tar.bz2 xv6-labs-2fe04bc8faa4bf737a86c36a8017473e84814f3b.zip |
Merge branch 'traps' into cow
Conflicts:
.gitignore
Makefile
conf/lab.mk
Diffstat (limited to 'user/pingpong.c')
-rw-r--r-- | user/pingpong.c | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/user/pingpong.c b/user/pingpong.c new file mode 100644 index 0000000..7b03a76 --- /dev/null +++ b/user/pingpong.c @@ -0,0 +1,44 @@ +#include "kernel/types.h" +#include "user/user.h" + +int +main(int argc, char* argv[]) +{ + int p[2]; + + if (argc > 1) { + fprintf(2, "usage: pingpong\n"); + exit(1); + } + + pipe(p); + + int pid = fork(); + + if (pid == 0) { + short n; + read(p[0], &n, sizeof(n)); + if (n == 42) { + fprintf(1, "%d: received ping\n", getpid()); + } + n++; + write(p[1], &n, sizeof(n)); + close(p[0]); + close(p[1]); + exit(0); + } + + short n = 42; + + write(p[1], &n, sizeof(n)); + read(p[0], &n, sizeof(n)); + if (n == 43) { + fprintf(1, "%d: received pong\n", getpid()); + } + close(p[0]); + close(p[1]); + + wait(0); + + exit(0); +} |