ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/IO-AIO/AIO.pm
(Generate patch)

Comparing IO-AIO/AIO.pm (file contents):
Revision 1.220 by root, Sun Apr 1 17:46:02 2012 UTC vs.
Revision 1.227 by root, Tue May 29 03:58:02 2012 UTC

168use common::sense; 168use common::sense;
169 169
170use base 'Exporter'; 170use base 'Exporter';
171 171
172BEGIN { 172BEGIN {
173 our $VERSION = '4.13'; 173 our $VERSION = '4.15';
174 174
175 our @AIO_REQ = qw(aio_sendfile aio_seek aio_read aio_write aio_open aio_close 175 our @AIO_REQ = qw(aio_sendfile aio_seek aio_read aio_write aio_open aio_close
176 aio_stat aio_lstat aio_unlink aio_rmdir aio_readdir aio_readdirx 176 aio_stat aio_lstat aio_unlink aio_rmdir aio_readdir aio_readdirx
177 aio_scandir aio_symlink aio_readlink aio_realpath aio_sync 177 aio_scandir aio_symlink aio_readlink aio_realpath aio_sync
178 aio_fsync aio_syncfs aio_fdatasync aio_sync_file_range aio_fallocate 178 aio_fsync aio_syncfs aio_fdatasync aio_sync_file_range aio_fallocate
179 aio_pathsync aio_readahead 179 aio_pathsync aio_readahead aio_fiemap
180 aio_rename aio_link aio_move aio_copy aio_group 180 aio_rename aio_link aio_move aio_copy aio_group
181 aio_nop aio_mknod aio_load aio_rmtree aio_mkdir aio_chown 181 aio_nop aio_mknod aio_load aio_rmtree aio_mkdir aio_chown
182 aio_chmod aio_utime aio_truncate 182 aio_chmod aio_utime aio_truncate
183 aio_msync aio_mtouch aio_mlock aio_mlockall 183 aio_msync aio_mtouch aio_mlock aio_mlockall
184 aio_statvfs 184 aio_statvfs
272 IO::AIO::nready 272 IO::AIO::nready
273 IO::AIO::npending 273 IO::AIO::npending
274 274
275 IO::AIO::sendfile $ofh, $ifh, $offset, $count 275 IO::AIO::sendfile $ofh, $ifh, $offset, $count
276 IO::AIO::fadvise $fh, $offset, $len, $advice 276 IO::AIO::fadvise $fh, $offset, $len, $advice
277 IO::AIO::mmap $scalar, $length, $prot, $flags[, $fh[, $offset]]
278 IO::AIO::munmap $scalar
277 IO::AIO::madvise $scalar, $offset, $length, $advice 279 IO::AIO::madvise $scalar, $offset, $length, $advice
278 IO::AIO::mprotect $scalar, $offset, $length, $protect 280 IO::AIO::mprotect $scalar, $offset, $length, $protect
279 IO::AIO::munlock $scalar, $offset = 0, $length = undef 281 IO::AIO::munlock $scalar, $offset = 0, $length = undef
280 IO::AIO::munlockall 282 IO::AIO::munlockall
281 283
413 415
414=cut 416=cut
415 417
416=item aio_seek $fh, $offset, $whence, $callback->($offs) 418=item aio_seek $fh, $offset, $whence, $callback->($offs)
417 419
418Seeks the filehandle to the new C<$offset>, similarly to perl'S 420Seeks the filehandle to the new C<$offset>, similarly to perl's
419C<sysseek>. The C<$whence> can use the traditional values (C<0> for 421C<sysseek>. The C<$whence> can use the traditional values (C<0> for
420C<IO::AIO::SEEK_SET>, C<1> for C<IO::AIO::SEEK_CUR> or C<2> for 422C<IO::AIO::SEEK_SET>, C<1> for C<IO::AIO::SEEK_CUR> or C<2> for
421C<IO::AIO::SEEK_END>). 423C<IO::AIO::SEEK_END>).
422 424
423The resulting absolute offset will be passed to the callback, or C<-1> in 425The resulting absolute offset will be passed to the callback, or C<-1> in
424case of an error. 426case of an error.
425 427
426In theory, the C<$whence> constants could be different than the 428In theory, the C<$whence> constants could be different than the
427corresponding values from L<Fcntl>, but perl guarantees they are the same, 429corresponding values from L<Fcntl>, but perl guarantees they are the same,
428so don't panic. 430so don't panic.
431
432As a GNU/Linux (and maybe Solaris) extension, also the constants
433C<IO::AIO::SEEK_DATA> and C<IO::AIO::SEEK_HOLE> are available, if they
434could be found. No guarantees about suitability for use in C<aio_seek> or
435Perl's C<sysseek> can be made though, although I would naively assume they
436"just work".
429 437
430=item aio_read $fh,$offset,$length, $data,$dataoffset, $callback->($retval) 438=item aio_read $fh,$offset,$length, $data,$dataoffset, $callback->($retval)
431 439
432=item aio_write $fh,$offset,$length, $data,$dataoffset, $callback->($retval) 440=item aio_write $fh,$offset,$length, $data,$dataoffset, $callback->($retval)
433 441
1249 1257
1250Example: asynchronously lock all current and future pages into memory. 1258Example: asynchronously lock all current and future pages into memory.
1251 1259
1252 aio_mlockall IO::AIO::MCL_FUTURE; 1260 aio_mlockall IO::AIO::MCL_FUTURE;
1253 1261
1262=item aio_fiemap $fh, $start, $length, $flags, $count, $cb->(\@extents)
1263
1264Queries the extents of the given file (by calling the Linux FIEMAP ioctl,
1265see L<http://cvs.schmorp.de/IO-AIO/doc/fiemap.txt> for details). If the
1266C<ioctl> is not available on your OS, then this rquiest will fail with
1267C<ENOSYS>.
1268
1269C<$start> is the starting offset to query extents for, C<$length> is the
1270size of the range to query - if it is C<undef>, then the whole file will
1271be queried.
1272
1273C<$flags> is a combination of flags (C<IO::AIO::FIEMAP_FLAG_SYNC> or
1274C<IO::AIO::FIEMAP_FLAG_XATTR> - C<IO::AIO::FIEMAP_FLAGS_COMPAT> is also
1275exported), and is normally C<0> or C<IO::AIO::FIEMAP_FLAG_SYNC> to query
1276the data portion.
1277
1278C<$count> is the maximum number of extent records to return. If it is
1279C<undef>, then IO::AIO queries all extents of the file. As a very special
1280case, if it is C<0>, then the callback receives the number of extents
1281instead of the extents themselves.
1282
1283If an error occurs, the callback receives no arguments. The special
1284C<errno> value C<IO::AIO::EBADR> is available to test for flag errors.
1285
1286Otherwise, the callback receives an array reference with extent
1287structures. Each extent structure is an array reference itself, with the
1288following members:
1289
1290 [$logical, $physical, $length, $flags]
1291
1292Flags is any combination of the following flag values (typically either C<0>
1293or C<IO::AIO::FIEMAP_EXTENT_LAST>):
1294
1295C<IO::AIO::FIEMAP_EXTENT_LAST>, C<IO::AIO::FIEMAP_EXTENT_UNKNOWN>,
1296C<IO::AIO::FIEMAP_EXTENT_DELALLOC>, C<IO::AIO::FIEMAP_EXTENT_ENCODED>,
1297C<IO::AIO::FIEMAP_EXTENT_DATA_ENCRYPTED>, C<IO::AIO::FIEMAP_EXTENT_NOT_ALIGNED>,
1298C<IO::AIO::FIEMAP_EXTENT_DATA_INLINE>, C<IO::AIO::FIEMAP_EXTENT_DATA_TAIL>,
1299C<IO::AIO::FIEMAP_EXTENT_UNWRITTEN>, C<IO::AIO::FIEMAP_EXTENT_MERGED> or
1300C<IO::AIO::FIEMAP_EXTENT_SHARED>.
1301
1254=item aio_group $callback->(...) 1302=item aio_group $callback->(...)
1255 1303
1256This is a very special aio request: Instead of doing something, it is a 1304This is a very special aio request: Instead of doing something, it is a
1257container for other aio requests, which is useful if you want to bundle 1305container for other aio requests, which is useful if you want to bundle
1258many requests into a single, composite, request with a definite callback 1306many requests into a single, composite, request with a definite callback
1923Calls the C<munlockall> function. 1971Calls the C<munlockall> function.
1924 1972
1925On systems that do not implement C<munlockall>, this function returns 1973On systems that do not implement C<munlockall>, this function returns
1926ENOSYS, otherwise the return value of C<munlockall>. 1974ENOSYS, otherwise the return value of C<munlockall>.
1927 1975
1976=item IO::AIO::splice $r_fh, $r_off, $w_fh, $w_off, $length, $flags
1977
1978Calls the GNU/Linux C<splice(2)> syscall, if available. If C<$r_off> or
1979C<$w_off> are C<undef>, then C<NULL> is passed for these, otherwise they
1980should be the file offset.
1981
1982C<$r_fh> and C<$w_fh> should not refer to the same file, as splice might
1983silently corrupt the data in this case.
1984
1985The following symbol flag values are available: C<IO::AIO::SPLICE_F_MOVE>,
1986C<IO::AIO::SPLICE_F_NONBLOCK>, C<IO::AIO::SPLICE_F_MORE> and
1987C<IO::AIO::SPLICE_F_GIFT>.
1988
1989See the C<splice(2)> manpage for details.
1990
1991=item IO::AIO::tee $r_fh, $w_fh, $length, $flags
1992
1993Calls the GNU/Linux C<tee(2)> syscall, see it's manpage and the
1994description for C<IO::AIO::splice> above for details.
1995
1928=back 1996=back
1929 1997
1930=cut 1998=cut
1931 1999
1932min_parallel 8; 2000min_parallel 8;

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines