summaryrefslogtreecommitdiffstats
path: root/src/examples
diff options
context:
space:
mode:
Diffstat (limited to 'src/examples')
-rw-r--r--src/examples/Makefile10
-rw-r--r--src/examples/args.c12
-rw-r--r--src/examples/create.c29
-rw-r--r--src/examples/read.c22
-rw-r--r--src/examples/wait.c13
5 files changed, 86 insertions, 0 deletions
diff --git a/src/examples/Makefile b/src/examples/Makefile
index 8bd6ed2..6c7c09d 100644
--- a/src/examples/Makefile
+++ b/src/examples/Makefile
@@ -8,6 +8,16 @@ PROGS = cat cmp cp echo halt hex-dump ls mcat mcp mkdir pwd rm shell \
sumargv lab2test lab1test lab1test2 pfs pfs_reader pfs_writer dummy longrun \
child parent create-bad printf lab3test1 lab3test2 lab4test1
+PROGS += create read lab3test1 lab4test1 lab3test2 args wait
+
+create_SRC = create.c
+read_SRC = read.c
+lab3test1_SRC = lab3test1.c
+lab4test1_SRC = lab4test1.c
+lab3test2_SRC = lab3test2.c
+args_SRC = args.c
+wait_SRC = wait.c
+
# Added test programs
printf_SRC = printf.c
sumargv_SRC = sumargv.c
diff --git a/src/examples/args.c b/src/examples/args.c
new file mode 100644
index 0000000..643fb01
--- /dev/null
+++ b/src/examples/args.c
@@ -0,0 +1,12 @@
+#include <stdio.h>
+
+int
+main (int argc, char **argv)
+{
+ printf ("hello\n");
+ printf ("argc %p: %d\n", &argc, argc);
+ printf ("argv %p: %p\n", &argv, argv);
+ for (int i = 0; i < argc; i++) {
+ printf ("%d: %s\n", i, argv[i]);
+ }
+}
diff --git a/src/examples/create.c b/src/examples/create.c
new file mode 100644
index 0000000..65be47d
--- /dev/null
+++ b/src/examples/create.c
@@ -0,0 +1,29 @@
+#include <stdio.h>
+#include <syscall.h>
+
+int
+main (int argc, char *argv[])
+{
+ if (create ("test", 1)) {
+ printf ("created file\n");
+ } else {
+ printf ("couldn't create file\n");
+ }
+ int fd = open ("test"); // open 2
+ printf ("opened file with fd %d\n", fd);
+ int fd2 = open ("test"); // open 3
+ printf ("opened file with fd %d\n", fd2);
+ close(fd); // close 2
+ int fd3 = open ("test"); // open 2
+ printf ("opened file with fd %d\n", fd3);
+ close(fd2); // close 3
+ int fd4 = open ("test"); // open 3
+ printf ("opened file with fd %d\n", fd4);
+ close(fd4); // close 3, valid
+ close(fd3); // close 2, valid
+ close(fd); // close closed 2, invalid
+ int fd5 = open ("test"); // open 2
+ printf ("opened file with fd %d\n", fd5);
+
+ halt ();
+}
diff --git a/src/examples/read.c b/src/examples/read.c
new file mode 100644
index 0000000..4b50bd8
--- /dev/null
+++ b/src/examples/read.c
@@ -0,0 +1,22 @@
+#include <stdio.h>
+#include <syscall.h>
+
+int
+main (int argc, char *argv[])
+{
+ char read_buf[16] = {};
+
+ int fd = open ("readme");
+ if (fd == -1) {
+ halt ();
+ }
+ printf("opened file with fd %d\n", fd);
+
+ int n = read (fd, read_buf, 16);
+ printf("read %d bytes:\n", n);
+ printf("###############\n");
+ printf("%s\n", read_buf);
+
+ halt();
+ return 0;
+}
diff --git a/src/examples/wait.c b/src/examples/wait.c
new file mode 100644
index 0000000..ab0ea90
--- /dev/null
+++ b/src/examples/wait.c
@@ -0,0 +1,13 @@
+#include <stdio.h>
+#include <syscall.h>
+
+int
+main (int argc, char **argv)
+{
+ printf ("hello\n");
+ if (argc != 1) {
+ int child = exec("wait");
+ printf("%d: %d\n", child, wait(child));
+ }
+ exit(1);
+}