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 Knuth and that supports Fuse, but as mentioned in class, I strongly recommend C or C++. Your code will be tested on Knuth and must compile and run there.
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 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.
write
correctly requires that you
also implement
truncate
.)
/usr/include/asm-generic/errno*.h
; I
recommend sticking with the ones below about 50.)
You can do your development on any machine you choose that supports FUSE; however, your final code will be tested on Knuth and must run there. Mac users can try OSXFUSE; Linux users should be able to find FUSE as part of their distribution.
Compiling a FUSE program requires a slightly complicated command:
gcc -g -Og `pkg-config fuse --cflags --libs` my_hello.c -o my_helloA better approach, of course, is to use
make
. I have
provided a truly
minimal Makefile
that will let you type
"make foo
" for any foo.c
. You are
encouraged to use it and extend it to be more sensible.
Writing a Fuse client is complex enough to be worth a separate Web page with reference materials.
The class 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 and that you
get back precisely what you wrote.
I suggest a command
such as "echo wowee > testdir/hello
" for writing the
file. Depending
on your shell settings you may need to use "echo wowee >!
testdir/hello
" or "echo wowee >| testdir/hello
"
to avoid a "file exists" or "cannot overwrite
existing file" error message.
Submit your code (it should be a single file) by running the
cs137submit
command (type "man submit" for more information).
If you implement any additional features, describe them prominently in
comments at the top of the file.
© 2020, Geoff Kuenning
This page is maintained by Geoff Kuenning.