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.217 by root, Sun Oct 9 22:25:00 2011 UTC vs.
Revision 1.224 by root, Sat Apr 7 00:50:33 2012 UTC

168use common::sense; 168use common::sense;
169 169
170use base 'Exporter'; 170use base 'Exporter';
171 171
172BEGIN { 172BEGIN {
173 our $VERSION = '4.11'; 173 our $VERSION = '4.14';
174 174
175 our @AIO_REQ = qw(aio_sendfile 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
209documentation. 209documentation.
210 210
211 aio_wd $pathname, $callback->($wd) 211 aio_wd $pathname, $callback->($wd)
212 aio_open $pathname, $flags, $mode, $callback->($fh) 212 aio_open $pathname, $flags, $mode, $callback->($fh)
213 aio_close $fh, $callback->($status) 213 aio_close $fh, $callback->($status)
214 aio_seek $fh,$offset,$whence, $callback->($offs)
214 aio_read $fh,$offset,$length, $data,$dataoffset, $callback->($retval) 215 aio_read $fh,$offset,$length, $data,$dataoffset, $callback->($retval)
215 aio_write $fh,$offset,$length, $data,$dataoffset, $callback->($retval) 216 aio_write $fh,$offset,$length, $data,$dataoffset, $callback->($retval)
216 aio_sendfile $out_fh, $in_fh, $in_offset, $length, $callback->($retval) 217 aio_sendfile $out_fh, $in_fh, $in_offset, $length, $callback->($retval)
217 aio_readahead $fh,$offset,$length, $callback->($retval) 218 aio_readahead $fh,$offset,$length, $callback->($retval)
218 aio_stat $fh_or_path, $callback->($status) 219 aio_stat $fh_or_path, $callback->($status)
219 aio_lstat $fh, $callback->($status) 220 aio_lstat $fh, $callback->($status)
220 aio_statvfs $fh_or_path, $callback->($statvfs) 221 aio_statvfs $fh_or_path, $callback->($statvfs)
221 aio_utime $fh_or_path, $atime, $mtime, $callback->($status) 222 aio_utime $fh_or_path, $atime, $mtime, $callback->($status)
222 aio_chown $fh_or_path, $uid, $gid, $callback->($status) 223 aio_chown $fh_or_path, $uid, $gid, $callback->($status)
224 aio_chmod $fh_or_path, $mode, $callback->($status)
223 aio_truncate $fh_or_path, $offset, $callback->($status) 225 aio_truncate $fh_or_path, $offset, $callback->($status)
224 aio_chmod $fh_or_path, $mode, $callback->($status)
225 aio_unlink $pathname, $callback->($status) 226 aio_unlink $pathname, $callback->($status)
226 aio_mknod $pathname, $mode, $dev, $callback->($status) 227 aio_mknod $pathname, $mode, $dev, $callback->($status)
227 aio_link $srcpath, $dstpath, $callback->($status) 228 aio_link $srcpath, $dstpath, $callback->($status)
228 aio_symlink $srcpath, $dstpath, $callback->($status) 229 aio_symlink $srcpath, $dstpath, $callback->($status)
229 aio_readlink $pathname, $callback->($link) 230 aio_readlink $pathname, $callback->($link)
276 IO::AIO::madvise $scalar, $offset, $length, $advice 277 IO::AIO::madvise $scalar, $offset, $length, $advice
277 IO::AIO::mprotect $scalar, $offset, $length, $protect 278 IO::AIO::mprotect $scalar, $offset, $length, $protect
278 IO::AIO::munlock $scalar, $offset = 0, $length = undef 279 IO::AIO::munlock $scalar, $offset = 0, $length = undef
279 IO::AIO::munlockall 280 IO::AIO::munlockall
280 281
281=head2 AIO REQUEST FUNCTIONS 282=head2 API NOTES
282 283
283All the C<aio_*> calls are more or less thin wrappers around the syscall 284All the C<aio_*> calls are more or less thin wrappers around the syscall
284with the same name (sans C<aio_>). The arguments are similar or identical, 285with the same name (sans C<aio_>). The arguments are similar or identical,
285and they all accept an additional (and optional) C<$callback> argument 286and they all accept an additional (and optional) C<$callback> argument
286which must be a code reference. This code reference will be called after 287which must be a code reference. This code reference will be called after
317correct contents. 318correct contents.
318 319
319This works, btw. independent of the internal UTF-8 bit, which IO::AIO 320This works, btw. independent of the internal UTF-8 bit, which IO::AIO
320handles correctly whether it is set or not. 321handles correctly whether it is set or not.
321 322
323=head2 AIO REQUEST FUNCTIONS
324
322=over 4 325=over 4
323 326
324=item $prev_pri = aioreq_pri [$pri] 327=item $prev_pri = aioreq_pri [$pri]
325 328
326Returns the priority value that would be used for the next request and, if 329Returns the priority value that would be used for the next request and, if
407 410
408Or in other words: the file descriptor will be closed, but it will not be 411Or in other words: the file descriptor will be closed, but it will not be
409free for reuse until the perl filehandle is closed. 412free for reuse until the perl filehandle is closed.
410 413
411=cut 414=cut
415
416=item aio_seek $fh, $offset, $whence, $callback->($offs)
417
418Seeks the filehandle to the new C<$offset>, similarly to perl's
419C<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
421C<IO::AIO::SEEK_END>).
422
423The resulting absolute offset will be passed to the callback, or C<-1> in
424case of an error.
425
426In theory, the C<$whence> constants could be different than the
427corresponding values from L<Fcntl>, but perl guarantees they are the same,
428so don't panic.
412 429
413=item aio_read $fh,$offset,$length, $data,$dataoffset, $callback->($retval) 430=item aio_read $fh,$offset,$length, $data,$dataoffset, $callback->($retval)
414 431
415=item aio_write $fh,$offset,$length, $data,$dataoffset, $callback->($retval) 432=item aio_write $fh,$offset,$length, $data,$dataoffset, $callback->($retval)
416 433
1232 1249
1233Example: asynchronously lock all current and future pages into memory. 1250Example: asynchronously lock all current and future pages into memory.
1234 1251
1235 aio_mlockall IO::AIO::MCL_FUTURE; 1252 aio_mlockall IO::AIO::MCL_FUTURE;
1236 1253
1254=item aio_fiemap $fh, $start, $length, $flags, $count, $cb->(\@extents)
1255
1256Queries the extents of the given file (by calling the Linux FIEMAP ioctl,
1257see L<http://cvs.schmorp.de/IO-AIO/doc/fiemap.txt> for details). If the
1258C<ioctl> is not available on your OS, then this rquiest will fail with
1259C<ENOSYS>.
1260
1261C<$start> is the starting offset to query extents for, C<$length> is the
1262size of the range to query - if it is C<undef>, then the whole file will
1263be queried.
1264
1265C<$flags> is a combination of flags (C<IO::AIO::FIEMAP_FLAG_SYNC> or
1266C<IO::AIO::FIEMAP_FLAG_XATTR> - C<IO::AIO::FIEMAP_FLAGS_COMPAT> is also
1267exported), and is normally C<0> or C<IO::AIO::FIEMAP_FLAG_SYNC> to query
1268the data portion.
1269
1270C<$count> is the maximum number of extent records to return. If it is
1271C<undef>, then IO::AIO queries all extents of the file. As a very special
1272case, if it is C<0>, then the callback receives the number of extents
1273instead of the extents themselves.
1274
1275If an error occurs, the callback receives no arguments. The special
1276C<errno> value C<IO::AIO::EBADR> is available to test for flag errors.
1277
1278Otherwise, the callback receives an array reference with extent
1279structures. Each extent structure is an array reference itself, with the
1280following members:
1281
1282 [$logical, $physical, $length, $flags]
1283
1284Flags is any combination of the following flag values (typically either C<0>
1285or C<IO::AIO::FIEMAP_EXTENT_LAST>):
1286
1287C<IO::AIO::FIEMAP_EXTENT_LAST>, C<IO::AIO::FIEMAP_EXTENT_UNKNOWN>,
1288C<IO::AIO::FIEMAP_EXTENT_DELALLOC>, C<IO::AIO::FIEMAP_EXTENT_ENCODED>,
1289C<IO::AIO::FIEMAP_EXTENT_DATA_ENCRYPTED>, C<IO::AIO::FIEMAP_EXTENT_NOT_ALIGNED>,
1290C<IO::AIO::FIEMAP_EXTENT_DATA_INLINE>, C<IO::AIO::FIEMAP_EXTENT_DATA_TAIL>,
1291C<IO::AIO::FIEMAP_EXTENT_UNWRITTEN>, C<IO::AIO::FIEMAP_EXTENT_MERGED> or
1292C<IO::AIO::FIEMAP_EXTENT_SHARED>.
1293
1237=item aio_group $callback->(...) 1294=item aio_group $callback->(...)
1238 1295
1239This is a very special aio request: Instead of doing something, it is a 1296This is a very special aio request: Instead of doing something, it is a
1240container for other aio requests, which is useful if you want to bundle 1297container for other aio requests, which is useful if you want to bundle
1241many requests into a single, composite, request with a definite callback 1298many requests into a single, composite, request with a definite callback

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines