5a1f5d9c535bbf96a63f858e567a18923fba3572
[perl-fuse.git] / Fuse.pm
1 package Fuse;
2
3 use 5.006;
4 use strict;
5 use warnings;
6 use Errno;
7 use Carp;
8 use Config;
9
10 require Exporter;
11 require DynaLoader;
12 use AutoLoader;
13 our @ISA = qw(Exporter DynaLoader);
14
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.
18
19 # This allows declaration       use Fuse ':all';
20 # If you do not need this, moving things directly into @EXPORT or @EXPORT_OK
21 # will save memory.
22 our %EXPORT_TAGS = (
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) ],
24                     'xattr' => [ qw(XATTR_CREATE XATTR_REPLACE) ],
25                     'ioctl' => [ qw(FUSE_IOCTL_COMPAT FUSE_IOCTL_UNRESTRICTED FUSE_IOCTL_RETRY FUSE_IOCTL_MAX_IOV) ],
26                     );
27
28 if (fuse_version() >= 2.8) {
29     push(@{$EXPORT_TAGS{'all'}}, qw(notify_poll pollhandle_destroy));
30
31 our @EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } );
32
33 our @EXPORT = ();
34 our $VERSION = '0.14';
35
36 sub AUTOLOAD {
37     # This AUTOLOAD is used to 'autoload' constants from the constant()
38     # XS function.  If a constant is not found then control is passed
39     # to the AUTOLOAD in AutoLoader.
40
41     my $constname;
42     our $AUTOLOAD;
43     ($constname = $AUTOLOAD) =~ s/.*:://;
44     croak "& not defined" if $constname eq 'constant';
45     my $val = constant($constname, @_ ? $_[0] : 0);
46     if ($! != 0) {
47         if ($!{EINVAL}) {
48             $AutoLoader::AUTOLOAD = $AUTOLOAD;
49             goto &AutoLoader::AUTOLOAD;
50         }
51         else {
52             croak "Your vendor has not defined Fuse macro $constname";
53         }
54     }
55     {
56         no strict 'refs';
57         # Fixed between 5.005_53 and 5.005_61
58         if ($] >= 5.00561) {
59             *$AUTOLOAD = sub () { $val };
60         }
61         else {
62             *$AUTOLOAD = sub { $val };
63         }
64     }
65     goto &$AUTOLOAD;
66 }
67
68 bootstrap Fuse $VERSION;
69
70 use constant FUSE_IOCTL_COMPAT          => (1 << 0);
71 use constant FUSE_IOCTL_UNRESTRICTED    => (1 << 1);
72 use constant FUSE_IOCTL_RETRY           => (1 << 2);
73 use constant FUSE_IOCTL_MAX_IOV         => 256;
74
75 sub main {
76         my @names = qw(getattr readlink getdir mknod mkdir unlink rmdir symlink
77                         rename link chmod chown truncate utime open read write statfs
78                         flush release fsync setxattr getxattr listxattr removexattr);
79         my $fuse_version = fuse_version();
80         if ($fuse_version >= 2.3) {
81                 push(@names, qw/opendir readdir releasedir fsyncdir init destroy/);
82         }
83         if ($fuse_version >= 2.5) {
84                 push(@names, qw/access create ftruncate fgetattr/);
85         }
86         if ($fuse_version >= 2.6) {
87                 push(@names, qw/lock utimens bmap/);
88         }
89         if ($fuse_version >= 2.8) {
90                 # junk doesn't contain a function pointer, and hopefully
91                 # never will; it's a "dead" zone in the struct
92                 # fuse_operations where a flag bit is declared. we don't
93                 # need to concern ourselves with it, and it appears any
94                 # arch with a 64 bit pointer will align everything to
95                 # 8 bytes, making the question of pointer alignment for
96                 # the last 2 wrapper functions no big thing.
97                 push(@names, qw/junk ioctl poll/);
98         }
99         my @subs = map {undef} @names;
100         my $tmp = 0;
101         my %mapping = map { $_ => $tmp++ } @names;
102         my @otherargs = qw(debug threaded mountpoint mountopts nullpath_ok);
103         my %otherargs = (
104                           debug         => 0,
105                           threaded      => 0,
106                           mountpoint    => "",
107                           mountopts     => "",
108                           nullpath_ok   => 0,
109                         );
110         while(my $name = shift) {
111                 my ($subref) = shift;
112                 if(exists($otherargs{$name})) {
113                         $otherargs{$name} = $subref;
114                 } else {
115                         croak "There is no function $name" unless exists($mapping{$name});
116                         croak "Usage: Fuse::main(getattr => \"main::my_getattr\", ...)" unless $subref;
117                         $subs[$mapping{$name}] = $subref;
118                 }
119         }
120         if($otherargs{threaded}) {
121                 # make sure threads are both available, and loaded.
122                 if($Config{useithreads}) {
123                         if(exists($threads::{VERSION})) {
124                                 if(exists($threads::shared::{VERSION})) {
125                                         # threads will work.
126                                 } else {
127                                         carp("Thread support requires you to use threads::shared.\nThreads are disabled.\n");
128                                         $otherargs{threaded} = 0;
129                                 }
130                         } else {
131                                 carp("Thread support requires you to use threads and threads::shared.\nThreads are disabled.\n");
132                                 $otherargs{threaded} = 0;
133                         }
134                 } else {
135                         carp("Thread support was not compiled into this build of perl.\nThreads are disabled.\n");
136                         $otherargs{threaded} = 0;
137                 }
138         }
139         perl_fuse_main(@otherargs{@otherargs},@subs);
140 }
141
142 # Autoload methods go after =cut, and are processed by the autosplit program.
143
144 1;
145 __END__
146
147 =head1 NAME
148
149 Fuse - write filesystems in Perl using FUSE
150
151 =head1 SYNOPSIS
152
153   use Fuse;
154   my ($mountpoint) = "";
155   $mountpoint = shift(@ARGV) if @ARGV;
156   Fuse::main(mountpoint=>$mountpoint, getattr=>"main::my_getattr", getdir=>"main::my_getdir", ...);
157
158 =head1 DESCRIPTION
159
160 This lets you implement filesystems in perl, through the FUSE
161 (Filesystem in USErspace) kernel/lib interface.
162
163 FUSE expects you to implement callbacks for the various functions.
164
165 In the following definitions, "errno" can be 0 (for a success),
166 -EINVAL, -ENOENT, -EONFIRE, any integer less than 1 really.
167
168 You can import standard error constants by saying something like
169 "use POSIX qw(EDOTDOT ENOANO);".
170
171 Every constant you need (file types, open() flags, error values,
172 etc) can be imported either from POSIX or from Fcntl, often both.
173 See their respective documentations, for more information.
174
175 =head2 EXPORTED SYMBOLS
176
177 None by default.
178
179 You can request all exportable symbols by using the tag ":all".
180
181 You can request the extended attribute symbols by using the tag ":xattr".
182 This will export XATTR_CREATE and XATTR_REPLACE.
183
184 =head2 FUNCTIONS
185
186 =head3 Fuse::main
187
188 Takes arguments in the form of hash key=>value pairs.  There are
189 many valid keys.  Most of them correspond with names of callback
190 functions, as described in section 'FUNCTIONS YOUR FILESYSTEM MAY IMPLEMENT'.
191 A few special keys also exist:
192
193
194 debug => boolean
195
196 =over 1
197
198 This turns FUSE call tracing on and off.  Default is 0 (which means off).
199
200 =back
201
202 mountpoint => string
203
204 =over 1
205
206 The point at which to mount this filesystem.  There is no default, you must
207 specify this.  An example would be '/mnt'.
208
209 =back
210
211 mountopts => string
212
213 =over 1
214
215 This is a comma seperated list of mount options to pass to the FUSE kernel
216 module.
217
218 At present, it allows the specification of the allow_other
219 argument when mounting the new FUSE filesystem. To use this, you will also
220 need 'user_allow_other' in /etc/fuse.conf as per the FUSE documention
221
222   mountopts => "allow_other" or
223   mountopts => ""
224
225 =back
226
227 threaded => boolean
228
229 =over 1
230
231 This turns FUSE multithreading on and off.  The default is 0, meaning your FUSE
232 script will run in single-threaded mode.  Note that single-threaded mode also
233 means that you will not have to worry about reentrancy, though you will have to
234 worry about recursive lookups.  In single-threaded mode, FUSE holds a global
235 lock on your filesystem, and will wait for one callback to return before
236 calling another.  This can lead to deadlocks, if your script makes any attempt
237 to access files or directories in the filesystem it is providing.  (This
238 includes calling stat() on the mount-point, statfs() calls from the 'df'
239 command, and so on and so forth.)  It is worth paying a little attention and
240 being careful about this.
241
242 Enabling multithreading will cause FUSE to make multiple simultaneous calls
243 into the various callback functions of your perl script.  If you enable 
244 threaded mode, you can enjoy all the parallel execution and interactive
245 response benefits of threads, and you get to enjoy all the benefits of race
246 conditions and locking bugs, too.  Please also ensure any other perl modules
247 you're using are also thread-safe.
248
249 (If enabled, this option will cause a warning if your perl interpreter was not
250 built with USE_ITHREADS, or if you have failed to use threads or
251 threads::shared.)
252
253 =back
254
255 nullpath_ok => boolean
256
257 =over 1
258
259 This flag tells Fuse to not pass paths for functions that operate on file
260 or directory handles. This will yield empty path parameters for functions
261 including read, write, flush, release, fsync, readdir, releasedir,
262 fsyncdir, truncate, fgetattr and lock. If you use this, you must return
263 file/directory handles from open, opendir and create. Default is 0 (off).
264 Only effective on Fuse 2.8 and up; with earlier versions, this does nothing.
265
266 =back
267
268 =head3 Fuse::fuse_get_context
269  
270  use Fuse "fuse_get_context";
271  my $caller_uid = fuse_get_context()->{"uid"};
272  my $caller_gid = fuse_get_context()->{"gid"};
273  my $caller_pid = fuse_get_context()->{"pid"};
274  
275 Access context information about the current Fuse operation. 
276
277 =head3 Fuse::fuse_version
278
279 Indicates the Fuse version in use; more accurately, indicates the version
280 of the Fuse API in use at build time. Returned as a decimal value; i.e.,
281 for Fuse API v2.6, will return "2.6".
282
283 =head3 Fuse::notify_poll
284
285 Only available if the Fuse module is built against libfuse 2.8 or later.
286 Use fuse_version() to determine if this is the case. Calling this function
287 with a pollhandle argument (as provided to the C<poll> operation
288 implementation) will send a notification to the caller poll()ing for
289 I/O operation availability. If more than one pollhandle is provided for
290 the same filehandle, only use the latest; you *can* send notifications
291 to them all, but it is unnecessary and decreases performance.
292
293 ONLY supply poll handles fed to you through C<poll> to this function.
294 Due to thread safety requirements, we can't currently package the pointer
295 up in an object the way we'd like to to prevent this situation, but your
296 filesystem server program may segfault, or worse, if you feed things to
297 this function which it is not supposed to receive. If you do anyway, we
298 take no responsibility for whatever Bad Things(tm) may happen.
299
300 =head3 Fuse::pollhandle_destroy
301
302 Only available if the Fuse module is built against libfuse 2.8 or later.
303 Use fuse_version() to determine if this is the case. This function destroys
304 a poll handle (fed to your program through C<poll>). When you are done
305 with a poll handle, either because it has been replaced, or because a
306 notification has been sent to it, pass it to this function to dispose of
307 it safely.
308
309 ONLY supply poll handles fed to you through C<poll> to this function.
310 Due to thread safety requirements, we can't currently package the pointer
311 up in an object the way we'd like to to prevent this situation, but your
312 filesystem server program may segfault, or worse, if you feed things to
313 this function which it is not supposed to receive. If you do anyway, we
314 take no responsibility for whatever Bad Things(tm) may happen.
315
316 =head2 FUNCTIONS YOUR FILESYSTEM MAY IMPLEMENT
317
318 =head3 getattr
319
320 Arguments:  filename.
321
322 Returns a list, very similar to the 'stat' function (see
323 perlfunc).  On error, simply return a single numeric scalar
324 value (e.g. "return -ENOENT();").
325
326 FIXME: the "ino" field is currently ignored.  I tried setting it to 0
327 in an example script, which consistently caused segfaults.
328
329 Fields (the following was stolen from perlfunc(1) with apologies):
330
331 ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,
332         $atime,$mtime,$ctime,$blksize,$blocks)
333                          = getattr($filename);
334
335 Here are the meaning of the fields:
336
337  0 dev      device number of filesystem
338  1 ino      inode number
339  2 mode     file mode  (type and permissions)
340  3 nlink    number of (hard) links to the file
341  4 uid      numeric user ID of file's owner
342  5 gid      numeric group ID of file's owner
343  6 rdev     the device identifier (special files only)
344  7 size     total size of file, in bytes
345  8 atime    last access time in seconds since the epoch
346  9 mtime    last modify time in seconds since the epoch
347 10 ctime    inode change time (NOT creation time!) in seconds
348             since the epoch
349 11 blksize  preferred block size for file system I/O
350 12 blocks   actual number of blocks allocated
351
352 (The epoch was at 00:00 January 1, 1970 GMT.)
353
354 =head3 readlink
355
356 Arguments:  link pathname.
357
358 Returns a scalar: either a numeric constant, or a text string.
359
360 This is called when dereferencing symbolic links, to learn the target.
361
362 example rv: return "/proc/self/fd/stdin";
363
364 =head3 getdir
365
366 Arguments:  Containing directory name.
367
368 Returns a list: 0 or more text strings (the filenames), followed by a numeric errno (usually 0).
369
370 This is used to obtain directory listings.  It's opendir(), readdir(), filldir() and closedir() all in one call.
371
372 example rv: return ('.', 'a', 'b', 0);
373
374 =head3 mknod
375
376 Arguments:  Filename, numeric modes, numeric device
377
378 Returns an errno (0 upon success, as usual).
379
380 This function is called for all non-directory, non-symlink nodes,
381 not just devices.
382
383 =head3 mkdir
384
385 Arguments:  New directory pathname, numeric modes.
386
387 Returns an errno.
388
389 Called to create a directory.
390
391 =head3 unlink
392
393 Arguments:  Filename.
394
395 Returns an errno.
396
397 Called to remove a file, device, or symlink.
398
399 =head3 rmdir
400
401 Arguments:  Pathname.
402
403 Returns an errno.
404
405 Called to remove a directory.
406
407 =head3 symlink
408
409 Arguments:  Existing filename, symlink name.
410
411 Returns an errno.
412
413 Called to create a symbolic link.
414
415 =head3 rename
416
417 Arguments:  old filename, new filename.
418
419 Returns an errno.
420
421 Called to rename a file, and/or move a file from one directory to another.
422
423 =head3 link
424
425 Arguments:  Existing filename, hardlink name.
426
427 Returns an errno.
428
429 Called to create hard links.
430
431 =head3 chmod
432
433 Arguments:  Pathname, numeric modes.
434
435 Returns an errno.
436
437 Called to change permissions on a file/directory/device/symlink.
438
439 =head3 chown
440
441 Arguments:  Pathname, numeric uid, numeric gid.
442
443 Returns an errno.
444
445 Called to change ownership of a file/directory/device/symlink.
446
447 =head3 truncate
448
449 Arguments:  Pathname, numeric offset.
450
451 Returns an errno.
452
453 Called to truncate a file, at the given offset.
454
455 =head3 utime
456
457 Arguments:  Pathname, numeric actime, numeric modtime.
458
459 Returns an errno.
460
461 Called to change access/modification times for a file/directory/device/symlink.
462
463 =head3 open
464
465 Arguments:  Pathname, numeric flags (which is an OR-ing of stuff like O_RDONLY
466 and O_SYNC, constants you can import from POSIX), fileinfo hash reference.
467
468 Returns an errno, a file handle (optional).
469
470 No creation, or trunctation flags (O_CREAT, O_EXCL, O_TRUNC) will be passed to open().
471 The fileinfo hash reference contains flags from the Fuse open call which may be modified by the module. The only fields presently supported are:
472  direct_io (version 2.4 onwards)
473  keep_cache (version 2.4 onwards)
474  nonseekable (version 2.9 onwards)
475 Your open() method needs only check if the operation is permitted for the given flags, and return 0 for success.
476 Optionally a file handle may be returned, which will be passed to subsequent read, write, flush, fsync and release calls.
477
478 =head3 read
479
480 Arguments:  Pathname, numeric requested size, numeric offset, file handle
481
482 Returns a numeric errno, or a string scalar with up to $requestedsize bytes of data.
483
484 Called in an attempt to fetch a portion of the file.
485
486 =head3 write
487
488 Arguments:  Pathname, scalar buffer, numeric offset, file handle.  You can use length($buffer) to
489 find the buffersize.
490 Returns length($buffer) if successful (number of bytes written).
491
492 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.
493
494 =head3 statfs
495
496 Arguments:  none
497
498 Returns any of the following:
499
500 -ENOANO()
501
502 or
503
504 $namelen, $files, $files_free, $blocks, $blocks_avail, $blocksize
505
506 or
507
508 -ENOANO(), $namelen, $files, $files_free, $blocks, $blocks_avail, $blocksize
509
510 =head3 flush
511
512 Arguments: Pathname, file handle
513
514 Returns an errno or 0 on success.
515
516 Called to synchronise any cached data. This is called before the file
517 is closed. It may be called multiple times before a file is closed.
518
519 =head3 release
520
521 Arguments: Pathname, numeric flags passed to open, file handle
522 Returns an errno or 0 on success.
523
524 Called to indicate that there are no more references to the file. Called once
525 for every file with the same pathname and flags as were passed to open.
526
527 =head3 fsync
528
529 Arguments: Pathname, numeric flags
530
531 Returns an errno or 0 on success.
532
533 Called to synchronise the file's contents. If flags is non-zero,
534 only synchronise the user data. Otherwise synchronise the user and meta data.
535
536 =head3 setxattr
537
538 Arguments: Pathname, extended attribute's name, extended attribute's value, numeric flags (which is an OR-ing of XATTR_CREATE and XATTR_REPLACE 
539
540 Returns an errno or 0 on success.
541
542 Called to set the value of the named extended attribute.
543
544 If you wish to reject setting of a particular form of extended attribute name
545 (e.g.: regexps matching user\..* or security\..*), then return - EOPNOTSUPP.
546
547 If flags is set to XATTR_CREATE and the extended attribute already exists,
548 this should fail with - EEXIST. If flags is set to XATTR_REPLACE
549 and the extended attribute doesn't exist, this should fail with - ENOATTR.
550
551 XATTR_CREATE and XATTR_REPLACE are provided by this module, but not exported
552 by default. To import them:
553
554     use Fuse ':xattr';
555
556 or:
557
558     use Fuse ':all';
559
560 =head3 getxattr
561
562 Arguments: Pathname, extended attribute's name
563
564 Returns an errno, 0 if there was no value, or the extended attribute's value.
565
566 Called to get the value of the named extended attribute.
567
568 =head3 listxattr
569
570 Arguments: Pathname
571
572 Returns a list: 0 or more text strings (the extended attribute names), followed by a numeric errno (usually 0).
573
574 =head3 removexattr
575
576 Arguments: Pathname, extended attribute's name
577
578 Returns an errno or 0 on success.
579
580 =head3 opendir
581
582 Arguments: Pathname of a directory
583 Returns an errno, and a directory handle (optional)
584
585 Called when opening a directory for reading. If special handling is
586 required to open a directory, this operation can be implemented to handle
587 that.
588
589 =head3 readdir
590
591 Arguments: Pathname of a directory, numeric offset, (optional) directory handle
592
593 Returns a list of 0 or more entries, followed by a numeric errno (usually 0).
594 The entries can be simple strings (filenames), or arrays containing an
595 offset number, the filename, and optionally an array ref containing the
596 stat values (as would be returned from getattr()).
597
598 This is used to read entries from a directory. It can be used to return just
599 entry names like getdir(), or can get a segment of the available entries,
600 which requires using array refs and the 2- or 3-item form, with offset values
601 starting from 1. If you wish to return the parameters to fill each entry's
602 struct stat, but do not wish to do partial entry lists/entry counting, set
603 the first element of each array to 0 always.
604
605 Note that if this call is implemented, it overrides getdir() ALWAYS.
606
607 =head3 releasedir
608
609 Arguments: Pathname of a directory, (optional) directory handle
610
611 Returns an errno or 0 on success
612
613 Called when there are no more references to an opened directory. Called once
614 for each pathname or handle passed to opendir(). Similar to release(), but
615 for directories. Accepts a return value, but like release(), the response
616 code will not propagate to any corresponding closedir() calls.
617
618 =head3 fsyncdir
619
620 Arguments: Pathname of a directory, numeric flags, (optional) directory handle
621
622 Returns an errno or 0 on success.
623
624 Called to synchronize any changes to a directory's contents. If flag is
625 non-zero, only synchronize user data, otherwise synchronize user data and
626 metadata.
627
628 =head3 init
629
630 Arguments: None.
631
632 Returns (optionally) an SV to be passed as private_data via fuse_get_context().
633
634 =head3 destroy
635
636 Arguments: (optional) private data SV returned from init(), if any.
637
638 Returns nothing.
639
640 =head3 access
641
642 Arguments: Pathname, access mode flags
643
644 Returns an errno or 0 on success.
645
646 Determine if the user attempting to access the indicated file has access to
647 perform the requested actions. The user ID can be determined by calling
648 fuse_get_context(). See access(2) for more information.
649
650 =head3 create
651
652 Arguments: Pathname, create mask, open mode flags
653
654 Returns errno or 0 on success, and (optional) file handle.
655
656 Create a file with the path indicated, then open a handle for reading and/or
657 writing with the supplied mode flags. Can also return a file handle like
658 open() as part of the call.
659
660 =head3 ftruncate
661
662 Arguments: Pathname, numeric offset, (optional) file handle
663
664 Returns errno or 0 on success
665
666 Like truncate(), but on an opened file.
667
668 =head3 fgetattr
669
670 Arguments: Pathname, (optional) file handle
671
672 Returns a list, very similar to the 'stat' function (see
673 perlfunc).  On error, simply return a single numeric scalar
674 value (e.g. "return -ENOENT();").
675
676 Like getattr(), but on an opened file.
677
678 =head3 lock
679
680 Arguments: Pathname, numeric command code, hashref containing lock parameters, (optional) file handle
681
682 Returns errno or 0 on success
683
684 Used to lock or unlock regions of a file. Locking is handled locally, but this
685 allows (especially for networked file systems) for protocol-level locking
686 semantics to also be employed, if any are available.
687
688 See the Fuse documentation for more explanation of lock(). The needed symbols
689 for the lock constants can be obtained by importing Fcntl.
690
691 =head3 utimens
692
693 Arguments: Pathname, last accessed time, last modified time
694
695 Returns errno or 0 on success
696
697 Like utime(), but allows time resolution down to the nanosecond. Currently
698 times are passed as "numeric" (internally I believe these are represented
699 typically as "long double"), so the sub-second portion is represented as
700 fractions of a second.
701
702 Note that if this call is implemented, it overrides utime() ALWAYS.
703
704 =head3 bmap
705
706 Arguments: Pathname, numeric blocksize, numeric block number
707
708 Returns errno or 0 on success, and physical block number if successful
709
710 Used to map a block number offset in a file to the physical block offset
711 on the block device backing the file system. This is intended for
712 filesystems that are stored on an actual block device, with the 'blkdev'
713 option passed.
714
715 =head3 ioctl
716
717 Arguments: Pathname, (signed) ioctl command code, flags, data if ioctl op is a write, (optional) file handle
718
719 Returns errno or 0 on success, and data if ioctl op is a read
720
721 Used to handle ioctl() operations on files. See ioctl(2) for more
722 information on the fine details of ioctl operation numbers. May need to
723 h2ph system headers to get the necessary macros; keep in mind the macros
724 are highly OS-dependent.
725
726 Keep in mind that read and write are from the client perspective, so
727 read from our end means data is going *out*, and write means data is
728 coming *in*. It can be slightly confusing.
729
730 =head1 poll
731
732 Arguments: Pathname, poll handle ID (or undef if none), event mask, (optional) file handle
733
734 Returns errno or 0 on success, and updated event mask on success
735
736 Used to handle poll() operations on files. See poll(2) to learn more about
737 event polling. Use IO::Poll to get the POLLIN, POLLOUT, and other symbols
738 to describe the events which can happen on the filehandle. Save the poll
739 handle ID to be passed to C<notify_poll> and C<pollhandle_destroy>
740 functions, if it is not undef. Threading will likely be necessary for this
741 operation to work.
742
743 There is not an "out of band" data transfer channel provided as part of
744 FUSE, so POLLPRI/POLLRDBAND/POLLWRBAND won't work.
745
746 Poll handle is currently a read-only scalar; we are investigating a way
747 to make this an object instead.
748
749 =head1 AUTHOR
750
751 Mark Glines, E<lt>mark@glines.orgE<gt>
752
753 =head1 SEE ALSO
754
755 L<perl>, the FUSE documentation.
756
757 =cut