+++ /dev/null
-General Information
-===================
-
-This is a Python[1] interface to FUSE[2].
-
-FUSE (Filesystem in USErspace) is a simple interface for userspace
-programs to export a virtual filesystem to the linux kernel. FUSE
-also aims to provide a secure method for non privileged users to
-create and mount their own filesystem implementations.
-
-When run from the commandline, "fuse.py" simply reexports the root
-filesystem within the mount point as example/fusexmp does in the main
-FUSE distribution. It also offers a class, fuse.Fuse, which can be
-subclassed to create a filesystem. fuse.Xmp is the example filesystem
-implementation.
-
-In your subclass of fuse, add attributes with the expected names
-("getattr", "readlink", etc) and call signatures (refer to fuse.Xmp)
-then call main(). Make it runnable as a #! script, and mount with
- fusermount <mount point> <script name>
-for some reason,
- fusermount <mount point> python <script name>
-does not seem to work. (why?)
-
-Limitations
-===========
-
-This is minimally tested, though I think I have exercised each function.
-There's no documentation, docstrings, or tests.
-
-Python's lstat() does not return some fields which must be filled in
-(st_blksize, st_blocks, st_ino), and _fusemodule assumes that the return
-value from the lstat() method is identical to Python's lstat(). This
-limitation should be lifted, and some standard order chosen for these
-three values. For now, though, default values are chosen and du returns a
-number similar to the "real" one.
-
-The Python Global Interpreter Lock is not handled, so using
-fuse.MULTITHREAD will not work. Modifying the PROLOGUE and EPILOGUE
-functions may take care of this. For now, just run without
-fuse.MULTITHREAD in flags.
-
-Author
-======
-
-I'm Jeff Epler <jepler@unpythonic.dhs.org>. I've been dabbling in
-Python for nearly 7 years now, and interested (despite the lack of a
-real practical use) in userspace filesystems ever since I couldn't get
-userfs to compile way back in '93 or so. FUSE is cool, but i'm still
-not sure what it's good for in practical terms.
-
-I don't know how high a level of interest I'll maintain in this project,
-so if you want to do something with it feel free to do so. Like FUSE,
-this software is distributed under the terms of the GNU General Public
-License, Version 2. Future versions, if any, will be available at [3].
-
-
-[1] http://www.python.org
-[2] http://sourceforge.net/projects/avf/
-[3] http://unpythonic.dhs.org/~jepler/fuse/
AC_INIT(lib/fuse.c)
-AM_INIT_AUTOMAKE(fuse, 0.9)
+AM_INIT_AUTOMAKE(fuse, 0.95)
AM_CONFIG_HEADER(include/config.h)
AC_PROG_CC
#include <fcntl.h>
static const char *hello_str = "Hello World!\n";
+static const char *hello_path = "/hello";
static int hello_getattr(const char *path, struct stat *stbuf)
{
stbuf->st_mode = S_IFDIR | 0755;
stbuf->st_nlink = 2;
}
- else if(strcmp(path, "/hello") == 0) {
- stbuf->st_mode = S_IFREG | 0644;
+ else if(strcmp(path, hello_path) == 0) {
+ stbuf->st_mode = S_IFREG | 0444;
stbuf->st_nlink = 1;
stbuf->st_size = strlen(hello_str);
}
filler(h, ".", 0);
filler(h, "..", 0);
- filler(h, "hello", 0);
+ filler(h, hello_path + 1, 0);
return 0;
}
static int hello_open(const char *path, int flags)
{
- if(strcmp(path, "/hello") != 0)
+ if(strcmp(path, hello_path) != 0)
return -ENOENT;
if((flags & 3) != O_RDONLY)
static int hello_read(const char *path, char *buf, size_t size, off_t offset)
{
- if(strcmp(path, "/hello") != 0)
+ if(strcmp(path, hello_path) != 0)
return -ENOENT;
memcpy(buf, hello_str + offset, size);
return size;
}
-static struct fuse_operations null_oper = {
+static struct fuse_operations hello_oper = {
getattr: hello_getattr,
readlink: NULL,
getdir: hello_getdir,
int main(int argc, char *argv[])
{
- fuse_main(argc, argv, &null_oper);
+ fuse_main(argc, argv, &hello_oper);
return 0;
}
--- /dev/null
+General Information
+===================
+
+This is a Python[1] interface to FUSE[2].
+
+FUSE (Filesystem in USErspace) is a simple interface for userspace
+programs to export a virtual filesystem to the linux kernel. FUSE
+also aims to provide a secure method for non privileged users to
+create and mount their own filesystem implementations.
+
+When run from the commandline, "fuse.py" simply reexports the root
+filesystem within the mount point as example/fusexmp does in the main
+FUSE distribution. It also offers a class, fuse.Fuse, which can be
+subclassed to create a filesystem. fuse.Xmp is the example filesystem
+implementation.
+
+In your subclass of fuse, add attributes with the expected names
+("getattr", "readlink", etc) and call signatures (refer to fuse.Xmp)
+then call main(). Make it runnable as a #! script, and mount with
+ fusermount <mount point> <script name>
+for some reason,
+ fusermount <mount point> python <script name>
+does not seem to work. (why?)
+
+Limitations
+===========
+
+This is minimally tested, though I think I have exercised each function.
+There's no documentation, docstrings, or tests.
+
+Python's lstat() does not return some fields which must be filled in
+(st_blksize, st_blocks, st_ino), and _fusemodule assumes that the return
+value from the lstat() method is identical to Python's lstat(). This
+limitation should be lifted, and some standard order chosen for these
+three values. For now, though, default values are chosen and du returns a
+number similar to the "real" one.
+
+The Python Global Interpreter Lock is not handled, so using
+fuse.MULTITHREAD will not work. Modifying the PROLOGUE and EPILOGUE
+functions may take care of this. For now, just run without
+fuse.MULTITHREAD in flags.
+
+Author
+======
+
+I'm Jeff Epler <jepler@unpythonic.dhs.org>. I've been dabbling in
+Python for nearly 7 years now, and interested (despite the lack of a
+real practical use) in userspace filesystems ever since I couldn't get
+userfs to compile way back in '93 or so. FUSE is cool, but i'm still
+not sure what it's good for in practical terms.
+
+I don't know how high a level of interest I'll maintain in this project,
+so if you want to do something with it feel free to do so. Like FUSE,
+this software is distributed under the terms of the GNU General Public
+License, Version 2. Future versions, if any, will be available at [3].
+
+
+[1] http://www.python.org
+[2] http://sourceforge.net/projects/avf/
+[3] http://unpythonic.dhs.org/~jepler/fuse/