diff options
author | Mole Shang <[email protected]> | 2024-02-14 20:46:23 +0800 |
---|---|---|
committer | Mole Shang <[email protected]> | 2024-02-14 20:46:23 +0800 |
commit | f98eeb30507040dc916b2a337818830954ee1d4a (patch) | |
tree | a741cb0bbd6be96d8084e72b4af895ac093a2b48 /user/pingpong.c | |
parent | 0de5ac779602f562a038e5ad27163d85bc71638b (diff) | |
parent | 904885a96efd1dd0221585f67477f5a39bcce7f7 (diff) | |
download | xv6-labs-f98eeb30507040dc916b2a337818830954ee1d4a.tar.gz xv6-labs-f98eeb30507040dc916b2a337818830954ee1d4a.tar.bz2 xv6-labs-f98eeb30507040dc916b2a337818830954ee1d4a.zip |
Merge branch 'net' into lock
Conflicts:
.gitignore
Makefile
conf/lab.mk
kernel/defs.h
user/user.h
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); +} |