The purpose of this assignment is to get you familiar with FUSE. You will be writing a very simple pseudo-filesystem that duplicates and slightly extends the "Hello, world" example on the FUSE Web site. The extension is that the single file in your filesystem will not be read-only; instead, you will be able to write a short replacement message to your "hello" file.
You may write in any language that is supported on Wilkes, but as mentioned in class, I strongly recommend C or (if Wilkes supports it) C++.
There are two ways to approach this assignment. The first is the lazy
way: start with the hello.c
example and make the quite
minimal modifications needed to turn it into the required program.
This is the foolish way to attack the problem.
The slightly more effortful, and much wiser, approach is to start with
the more complex fusexmp.c
and
use the hello.c
as a guide,
implementing stubs for all the functions that aren't needed in your
simple program. In the process, you will familiarize yourself with
much more of Fuse, learn how to return errors, and develop a framework
that will be useful when you do Homework 2.
Your assignment is to develop a filesystem with the following characteristics:
access()
system call works and says that
"goodgeoff" can be both read and written.
/usr/include/asm-generic/errno*.h
; I strongly
recommend sticking with the ones in errno-base.h
.)
You can do your development on any machine you choose that supports FUSE; however, your final code will be tested on Wilkes and must run there. Mac users can try macfuse; Linux users should be able to find FUSE as part of their distribution.
Compiling a FUSE program requires a slightly complicated command:
/usr/bin/gcc -g `pkg-config fuse --cflags --libs` my_hello.c -o my_helloA better approach, of course, is to use
make
. This truly
minimal Makefile
will let you type
"make foo
" for any foo.c
. You are
encouraged to use it and extend it to be more sensible.
NOTE: On Wilkes, be sure to use "/usr/bin/gcc" rather
than just "gcc". Wilkes is specially configured so that plain gcc
produces 32-bit code, but for this assignment you need 64-bit code.
Writing a Fuse client is complex enough to be worth a separate Web page with reference materials.
The FUSE documentation page contains instructions on how to run and debug FUSE programs in general. For this assignment, be sure to test not only that you can read your file, but that you can write to it (I suggest a command such as "echo wowee > testdir/hello") and that you get back precisely what you wrote.
Submit your code (it should be a single file) with cs135submit
.
If you implement any additional features, describe them prominently in
comments at the top of the file.
© 2010, Geoff Kuenning
This page is maintained by Geoff Kuenning.