diff options
Diffstat (limited to 'web/xv6-names.html')
-rw-r--r-- | web/xv6-names.html | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/web/xv6-names.html b/web/xv6-names.html new file mode 100644 index 0000000..926be3a --- /dev/null +++ b/web/xv6-names.html @@ -0,0 +1,78 @@ +<html> +<head> +<title>Homework: Naming</title> +</head> +<body> + +<h1>Homework: Naming</h1> + +<p> +<b>Read</b>: namei in fs.c, fd.c, sysfile.c + +<p> +This homework should be turned in at the beginning of lecture. + +<p> +<b>Symbolic Links</b> + +<p> +As you read namei and explore its varied uses throughout xv6, +think about what steps would be required to add symbolic links +to xv6. +A symbolic link is simply a file with a special type (e.g., T_SYMLINK +instead of T_FILE or T_DIR) whose contents contain the path being +linked to. + +<p> +Turn in a short writeup of how you would change xv6 to support +symlinks. List the functions that would have to be added or changed, +with short descriptions of the new functionality or changes. + +<p> +<b>This completes the homework.</b> + +<p> +The following is <i>not required</i>. If you want to try implementing +symbolic links in xv6, here are the files that the course staff +had to change to implement them: + +<pre> +fs.c: 20 lines added, 4 modified +syscall.c: 2 lines added +syscall.h: 1 line added +sysfile.c: 15 lines added +user.h: 1 line added +usys.S: 1 line added +</pre> + +Also, here is an <i>ln</i> program: + +<pre> +#include "types.h" +#include "user.h" + +int +main(int argc, char *argv[]) +{ + int (*ln)(char*, char*); + + ln = link; + if(argc > 1 && strcmp(argv[1], "-s") == 0){ + ln = symlink; + argc--; + argv++; + } + + if(argc != 3){ + printf(2, "usage: ln [-s] old new (%d)\n", argc); + exit(); + } + if(ln(argv[1], argv[2]) < 0){ + printf(2, "%s failed\n", ln == symlink ? "symlink" : "link"); + exit(); + } + exit(); +} +</pre> + +</body> |