13 our @ISA = qw(Exporter DynaLoader);
15 # Items to export into callers namespace by default. Note: do not export
16 # names by default without a very good reason. Use EXPORT_OK instead.
17 # Do not simply export all your public functions/methods/constants.
19 # This allows declaration use Fuse ':all';
20 # If you do not need this, moving things directly into @EXPORT or @EXPORT_OK
23 'all' => [ qw(XATTR_CREATE XATTR_REPLACE fuse_get_context fuse_version FUSE_IOCTL_COMPAT FUSE_IOCTL_UNRESTRICTED FUSE_IOCTL_RETRY FUSE_IOCTL_MAX_IOV notify_poll pollhandle_destroy) ],
24 'xattr' => [ qw(XATTR_CREATE XATTR_REPLACE) ],
25 'ioctl' => [ qw(FUSE_IOCTL_COMPAT FUSE_IOCTL_UNRESTRICTED FUSE_IOCTL_RETRY FUSE_IOCTL_MAX_IOV) ],
28 our @EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } );
31 our $VERSION = '0.14';
34 # This AUTOLOAD is used to 'autoload' constants from the constant()
35 # XS function. If a constant is not found then control is passed
36 # to the AUTOLOAD in AutoLoader.
40 ($constname = $AUTOLOAD) =~ s/.*:://;
41 croak "& not defined" if $constname eq 'constant';
42 my $val = constant($constname, @_ ? $_[0] : 0);
45 $AutoLoader::AUTOLOAD = $AUTOLOAD;
46 goto &AutoLoader::AUTOLOAD;
49 croak "Your vendor has not defined Fuse macro $constname";
54 # Fixed between 5.005_53 and 5.005_61
56 *$AUTOLOAD = sub () { $val };
59 *$AUTOLOAD = sub { $val };
65 bootstrap Fuse $VERSION;
67 use constant FUSE_IOCTL_COMPAT => (1 << 0);
68 use constant FUSE_IOCTL_UNRESTRICTED => (1 << 1);
69 use constant FUSE_IOCTL_RETRY => (1 << 2);
70 use constant FUSE_IOCTL_MAX_IOV => 256;
73 my @names = qw(getattr readlink getdir mknod mkdir unlink rmdir symlink
74 rename link chmod chown truncate utime open read write statfs
75 flush release fsync setxattr getxattr listxattr removexattr);
76 my $fuse_version = fuse_version();
77 if ($fuse_version >= 2.3) {
78 push(@names, qw/opendir readdir releasedir fsyncdir init destroy/);
80 if ($fuse_version >= 2.5) {
81 push(@names, qw/access create ftruncate fgetattr/);
83 if ($fuse_version >= 2.6) {
84 push(@names, qw/lock utimens bmap/);
86 if ($fuse_version >= 2.8) {
87 # junk doesn't contain a function pointer, and hopefully
88 # never will; it's a "dead" zone in the struct
89 # fuse_operations where a flag bit is declared. we don't
90 # need to concern ourselves with it, and it appears any
91 # arch with a 64 bit pointer will align everything to
92 # 8 bytes, making the question of pointer alignment for
93 # the last 2 wrapper functions no big thing.
94 push(@names, qw/junk ioctl poll/);
96 my @subs = map {undef} @names;
98 my %mapping = map { $_ => $tmp++ } @names;
99 my @otherargs = qw(debug threaded mountpoint mountopts nullpath_ok);
107 while(my $name = shift) {
108 my ($subref) = shift;
109 if(exists($otherargs{$name})) {
110 $otherargs{$name} = $subref;
112 croak "There is no function $name" unless exists($mapping{$name});
113 croak "Usage: Fuse::main(getattr => \"main::my_getattr\", ...)" unless $subref;
114 $subs[$mapping{$name}] = $subref;
117 if($otherargs{threaded}) {
118 # make sure threads are both available, and loaded.
119 if($Config{useithreads}) {
120 if(exists($threads::{VERSION})) {
121 if(exists($threads::shared::{VERSION})) {
124 carp("Thread support requires you to use threads::shared.\nThreads are disabled.\n");
125 $otherargs{threaded} = 0;
128 carp("Thread support requires you to use threads and threads::shared.\nThreads are disabled.\n");
129 $otherargs{threaded} = 0;
132 carp("Thread support was not compiled into this build of perl.\nThreads are disabled.\n");
133 $otherargs{threaded} = 0;
136 perl_fuse_main(@otherargs{@otherargs},@subs);
139 # Autoload methods go after =cut, and are processed by the autosplit program.
146 Fuse - write filesystems in Perl using FUSE
151 my ($mountpoint) = "";
152 $mountpoint = shift(@ARGV) if @ARGV;
153 Fuse::main(mountpoint=>$mountpoint, getattr=>"main::my_getattr", getdir=>"main::my_getdir", ...);
157 This lets you implement filesystems in perl, through the FUSE
158 (Filesystem in USErspace) kernel/lib interface.
160 FUSE expects you to implement callbacks for the various functions.
162 In the following definitions, "errno" can be 0 (for a success),
163 -EINVAL, -ENOENT, -EONFIRE, any integer less than 1 really.
165 You can import standard error constants by saying something like
166 "use POSIX qw(EDOTDOT ENOANO);".
168 Every constant you need (file types, open() flags, error values,
169 etc) can be imported either from POSIX or from Fcntl, often both.
170 See their respective documentations, for more information.
172 =head2 EXPORTED SYMBOLS
176 You can request all exportable symbols by using the tag ":all".
178 You can request the extended attribute symbols by using the tag ":xattr".
179 This will export XATTR_CREATE and XATTR_REPLACE.
185 Takes arguments in the form of hash key=>value pairs. There are
186 many valid keys. Most of them correspond with names of callback
187 functions, as described in section 'FUNCTIONS YOUR FILESYSTEM MAY IMPLEMENT'.
188 A few special keys also exist:
192 =item debug => boolean
194 This turns FUSE call tracing on and off. Default is 0 (which means off).
196 =item mountpoint => string
198 The point at which to mount this filesystem. There is no default, you must
199 specify this. An example would be '/mnt'.
201 =item mountopts => string
203 This is a comma separated list of mount options to pass to the FUSE kernel
206 At present, it allows the specification of the allow_other
207 argument when mounting the new FUSE filesystem. To use this, you will also
208 need 'user_allow_other' in /etc/fuse.conf as per the FUSE documention
210 mountopts => "allow_other" or
213 =item threaded => boolean
215 This turns FUSE multithreading on and off. The default is 0, meaning your FUSE
216 script will run in single-threaded mode. Note that single-threaded mode also
217 means that you will not have to worry about reentrancy, though you will have to
218 worry about recursive lookups. In single-threaded mode, FUSE holds a global
219 lock on your filesystem, and will wait for one callback to return before
220 calling another. This can lead to deadlocks, if your script makes any attempt
221 to access files or directories in the filesystem it is providing. (This
222 includes calling stat() on the mount-point, statfs() calls from the 'df'
223 command, and so on and so forth.) It is worth paying a little attention and
224 being careful about this.
226 Enabling multithreading will cause FUSE to make multiple simultaneous calls
227 into the various callback functions of your perl script. If you enable
228 threaded mode, you can enjoy all the parallel execution and interactive
229 response benefits of threads, and you get to enjoy all the benefits of race
230 conditions and locking bugs, too. Please also ensure any other perl modules
231 you're using are also thread-safe.
233 (If enabled, this option will cause a warning if your perl interpreter was not
234 built with USE_ITHREADS, or if you have failed to use threads or
237 =item nullpath_ok => boolean
239 This flag tells Fuse to not pass paths for functions that operate on file
240 or directory handles. This will yield empty path parameters for functions
241 including read, write, flush, release, fsync, readdir, releasedir,
242 fsyncdir, truncate, fgetattr and lock. If you use this, you must return
243 file/directory handles from open, opendir and create. Default is 0 (off).
244 Only effective on Fuse 2.8 and up; with earlier versions, this does nothing.
248 =head3 Fuse::fuse_get_context
250 use Fuse "fuse_get_context";
251 my $caller_uid = fuse_get_context()->{"uid"};
252 my $caller_gid = fuse_get_context()->{"gid"};
253 my $caller_pid = fuse_get_context()->{"pid"};
255 Access context information about the current Fuse operation.
257 =head3 Fuse::fuse_version
259 Indicates the Fuse version in use; more accurately, indicates the version
260 of the Fuse API in use at build time. Returned as a decimal value; i.e.,
261 for Fuse API v2.6, will return "2.6".
263 =head3 Fuse::notify_poll
265 Only available if the Fuse module is built against libfuse 2.8 or later.
266 Use fuse_version() to determine if this is the case. Calling this function
267 with a pollhandle argument (as provided to the C<poll> operation
268 implementation) will send a notification to the caller poll()ing for
269 I/O operation availability. If more than one pollhandle is provided for
270 the same filehandle, only use the latest; you *can* send notifications
271 to them all, but it is unnecessary and decreases performance.
273 ONLY supply poll handles fed to you through C<poll> to this function.
274 Due to thread safety requirements, we can't currently package the pointer
275 up in an object the way we'd like to to prevent this situation, but your
276 filesystem server program may segfault, or worse, if you feed things to
277 this function which it is not supposed to receive. If you do anyway, we
278 take no responsibility for whatever Bad Things(tm) may happen.
280 =head3 Fuse::pollhandle_destroy
282 Only available if the Fuse module is built against libfuse 2.8 or later.
283 Use fuse_version() to determine if this is the case. This function destroys
284 a poll handle (fed to your program through C<poll>). When you are done
285 with a poll handle, either because it has been replaced, or because a
286 notification has been sent to it, pass it to this function to dispose of
289 ONLY supply poll handles fed to you through C<poll> to this function.
290 Due to thread safety requirements, we can't currently package the pointer
291 up in an object the way we'd like to to prevent this situation, but your
292 filesystem server program may segfault, or worse, if you feed things to
293 this function which it is not supposed to receive. If you do anyway, we
294 take no responsibility for whatever Bad Things(tm) may happen.
296 =head2 FUNCTIONS YOUR FILESYSTEM MAY IMPLEMENT
302 Returns a list, very similar to the 'stat' function (see
303 perlfunc). On error, simply return a single numeric scalar
304 value (e.g. "return -ENOENT();").
306 FIXME: the "ino" field is currently ignored. I tried setting it to 0
307 in an example script, which consistently caused segfaults.
309 Fields (the following was stolen from perlfunc(1) with apologies):
311 ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,
312 $atime,$mtime,$ctime,$blksize,$blocks)
313 = getattr($filename);
315 Here are the meaning of the fields:
317 0 dev device number of filesystem
319 2 mode file mode (type and permissions)
320 3 nlink number of (hard) links to the file
321 4 uid numeric user ID of file's owner
322 5 gid numeric group ID of file's owner
323 6 rdev the device identifier (special files only)
324 7 size total size of file, in bytes
325 8 atime last access time in seconds since the epoch
326 9 mtime last modify time in seconds since the epoch
327 10 ctime inode change time (NOT creation time!) in seconds
329 11 blksize preferred block size for file system I/O
330 12 blocks actual number of blocks allocated
332 (The epoch was at 00:00 January 1, 1970 GMT.)
336 Arguments: link pathname.
338 Returns a scalar: either a numeric constant, or a text string.
340 This is called when dereferencing symbolic links, to learn the target.
342 example rv: return "/proc/self/fd/stdin";
346 Arguments: Containing directory name.
348 Returns a list: 0 or more text strings (the filenames), followed by a numeric errno (usually 0).
350 This is used to obtain directory listings. It's opendir(), readdir(), filldir() and closedir() all in one call.
352 example rv: return ('.', 'a', 'b', 0);
356 Arguments: Filename, numeric modes, numeric device
358 Returns an errno (0 upon success, as usual).
360 This function is called for all non-directory, non-symlink nodes,
365 Arguments: New directory pathname, numeric modes.
369 Called to create a directory.
377 Called to remove a file, device, or symlink.
385 Called to remove a directory.
389 Arguments: Existing filename, symlink name.
393 Called to create a symbolic link.
397 Arguments: old filename, new filename.
401 Called to rename a file, and/or move a file from one directory to another.
405 Arguments: Existing filename, hardlink name.
409 Called to create hard links.
413 Arguments: Pathname, numeric modes.
417 Called to change permissions on a file/directory/device/symlink.
421 Arguments: Pathname, numeric uid, numeric gid.
425 Called to change ownership of a file/directory/device/symlink.
429 Arguments: Pathname, numeric offset.
433 Called to truncate a file, at the given offset.
437 Arguments: Pathname, numeric actime, numeric modtime.
441 Called to change access/modification times for a file/directory/device/symlink.
445 Arguments: Pathname, numeric flags (which is an OR-ing of stuff like O_RDONLY
446 and O_SYNC, constants you can import from POSIX), fileinfo hash reference.
448 Returns an errno, a file handle (optional).
450 No creation, or truncation flags (O_CREAT, O_EXCL, O_TRUNC) will be passed to open().
451 The fileinfo hash reference contains flags from the Fuse open call which may be modified by the module. The only fields presently supported are:
452 direct_io (version 2.4 onwards)
453 keep_cache (version 2.4 onwards)
454 nonseekable (version 2.9 onwards)
455 Your open() method needs only check if the operation is permitted for the given flags, and return 0 for success.
456 Optionally a file handle may be returned, which will be passed to subsequent read, write, flush, fsync and release calls.
460 Arguments: Pathname, numeric requested size, numeric offset, file handle
462 Returns a numeric errno, or a string scalar with up to $requestedsize bytes of data.
464 Called in an attempt to fetch a portion of the file.
468 Arguments: Pathname, scalar buffer, numeric offset, file handle. You can use length($buffer) to
470 Returns length($buffer) if successful (number of bytes written).
472 Called in an attempt to write (or overwrite) a portion of the file. Be prepared because $buffer could contain random binary data with NULs and all sorts of other wonderful stuff.
478 Returns any of the following:
484 $namelen, $files, $files_free, $blocks, $blocks_avail, $blocksize
488 -ENOANO(), $namelen, $files, $files_free, $blocks, $blocks_avail, $blocksize
492 Arguments: Pathname, file handle
494 Returns an errno or 0 on success.
496 Called to synchronise any cached data. This is called before the file
497 is closed. It may be called multiple times before a file is closed.
501 Arguments: Pathname, numeric flags passed to open, file handle
502 Returns an errno or 0 on success.
504 Called to indicate that there are no more references to the file. Called once
505 for every file with the same pathname and flags as were passed to open.
509 Arguments: Pathname, numeric flags
511 Returns an errno or 0 on success.
513 Called to synchronise the file's contents. If flags is non-zero,
514 only synchronise the user data. Otherwise synchronise the user and meta data.
518 Arguments: Pathname, extended attribute's name, extended attribute's value, numeric flags (which is an OR-ing of XATTR_CREATE and XATTR_REPLACE
520 Returns an errno or 0 on success.
522 Called to set the value of the named extended attribute.
524 If you wish to reject setting of a particular form of extended attribute name
525 (e.g.: regexps matching user\..* or security\..*), then return - EOPNOTSUPP.
527 If flags is set to XATTR_CREATE and the extended attribute already exists,
528 this should fail with - EEXIST. If flags is set to XATTR_REPLACE
529 and the extended attribute doesn't exist, this should fail with - ENOATTR.
531 XATTR_CREATE and XATTR_REPLACE are provided by this module, but not exported
532 by default. To import them:
542 Arguments: Pathname, extended attribute's name
544 Returns an errno, 0 if there was no value, or the extended attribute's value.
546 Called to get the value of the named extended attribute.
552 Returns a list: 0 or more text strings (the extended attribute names), followed by a numeric errno (usually 0).
556 Arguments: Pathname, extended attribute's name
558 Returns an errno or 0 on success.
562 Arguments: Pathname of a directory
563 Returns an errno, and a directory handle (optional)
565 Called when opening a directory for reading. If special handling is
566 required to open a directory, this operation can be implemented to handle
571 Arguments: Pathname of a directory, numeric offset, (optional) directory handle
573 Returns a list of 0 or more entries, followed by a numeric errno (usually 0).
574 The entries can be simple strings (filenames), or arrays containing an
575 offset number, the filename, and optionally an array ref containing the
576 stat values (as would be returned from getattr()).
578 This is used to read entries from a directory. It can be used to return just
579 entry names like getdir(), or can get a segment of the available entries,
580 which requires using array refs and the 2- or 3-item form, with offset values
581 starting from 1. If you wish to return the parameters to fill each entry's
582 struct stat, but do not wish to do partial entry lists/entry counting, set
583 the first element of each array to 0 always.
585 Note that if this call is implemented, it overrides getdir() ALWAYS.
589 Arguments: Pathname of a directory, (optional) directory handle
591 Returns an errno or 0 on success
593 Called when there are no more references to an opened directory. Called once
594 for each pathname or handle passed to opendir(). Similar to release(), but
595 for directories. Accepts a return value, but like release(), the response
596 code will not propagate to any corresponding closedir() calls.
600 Arguments: Pathname of a directory, numeric flags, (optional) directory handle
602 Returns an errno or 0 on success.
604 Called to synchronize any changes to a directory's contents. If flag is
605 non-zero, only synchronize user data, otherwise synchronize user data and
612 Returns (optionally) an SV to be passed as private_data via fuse_get_context().
616 Arguments: (optional) private data SV returned from init(), if any.
622 Arguments: Pathname, access mode flags
624 Returns an errno or 0 on success.
626 Determine if the user attempting to access the indicated file has access to
627 perform the requested actions. The user ID can be determined by calling
628 fuse_get_context(). See access(2) for more information.
632 Arguments: Pathname, create mask, open mode flags
634 Returns errno or 0 on success, and (optional) file handle.
636 Create a file with the path indicated, then open a handle for reading and/or
637 writing with the supplied mode flags. Can also return a file handle like
638 open() as part of the call.
642 Arguments: Pathname, numeric offset, (optional) file handle
644 Returns errno or 0 on success
646 Like truncate(), but on an opened file.
650 Arguments: Pathname, (optional) file handle
652 Returns a list, very similar to the 'stat' function (see
653 perlfunc). On error, simply return a single numeric scalar
654 value (e.g. "return -ENOENT();").
656 Like getattr(), but on an opened file.
660 Arguments: Pathname, numeric command code, hashref containing lock parameters, (optional) file handle
662 Returns errno or 0 on success
664 Used to lock or unlock regions of a file. Locking is handled locally, but this
665 allows (especially for networked file systems) for protocol-level locking
666 semantics to also be employed, if any are available.
668 See the Fuse documentation for more explanation of lock(). The needed symbols
669 for the lock constants can be obtained by importing Fcntl.
673 Arguments: Pathname, last accessed time, last modified time
675 Returns errno or 0 on success
677 Like utime(), but allows time resolution down to the nanosecond. Currently
678 times are passed as "numeric" (internally I believe these are represented
679 typically as "long double"), so the sub-second portion is represented as
680 fractions of a second.
682 Note that if this call is implemented, it overrides utime() ALWAYS.
686 Arguments: Pathname, numeric blocksize, numeric block number
688 Returns errno or 0 on success, and physical block number if successful
690 Used to map a block number offset in a file to the physical block offset
691 on the block device backing the file system. This is intended for
692 filesystems that are stored on an actual block device, with the 'blkdev'
697 Arguments: Pathname, (signed) ioctl command code, flags, data if ioctl op is a write, (optional) file handle
699 Returns errno or 0 on success, and data if ioctl op is a read
701 Used to handle ioctl() operations on files. See ioctl(2) for more
702 information on the fine details of ioctl operation numbers. May need to
703 h2ph system headers to get the necessary macros; keep in mind the macros
704 are highly OS-dependent.
706 Keep in mind that read and write are from the client perspective, so
707 read from our end means data is going *out*, and write means data is
708 coming *in*. It can be slightly confusing.
712 Arguments: Pathname, poll handle ID (or undef if none), event mask, (optional) file handle
714 Returns errno or 0 on success, and updated event mask on success
716 Used to handle poll() operations on files. See poll(2) to learn more about
717 event polling. Use IO::Poll to get the POLLIN, POLLOUT, and other symbols
718 to describe the events which can happen on the filehandle. Save the poll
719 handle ID to be passed to C<notify_poll> and C<pollhandle_destroy>
720 functions, if it is not undef. Threading will likely be necessary for this
723 There is not an "out of band" data transfer channel provided as part of
724 FUSE, so POLLPRI/POLLRDBAND/POLLWRBAND won't work.
726 Poll handle is currently a read-only scalar; we are investigating a way
727 to make this an object instead.
731 Mark Glines, E<lt>mark@glines.orgE<gt>
735 L<perl>, the FUSE documentation.