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.301 by root, Mon Mar 18 23:52:09 2019 UTC vs.
Revision 1.302 by root, Wed Apr 3 03:03:53 2019 UTC

171use common::sense; 171use common::sense;
172 172
173use base 'Exporter'; 173use base 'Exporter';
174 174
175BEGIN { 175BEGIN {
176 our $VERSION = 4.71; 176 our $VERSION = 4.72;
177 177
178 our @AIO_REQ = qw(aio_sendfile aio_seek aio_read aio_write aio_open aio_close 178 our @AIO_REQ = qw(aio_sendfile aio_seek aio_read aio_write aio_open aio_close
179 aio_stat aio_lstat aio_unlink aio_rmdir aio_readdir aio_readdirx 179 aio_stat aio_lstat aio_unlink aio_rmdir aio_readdir aio_readdirx
180 aio_scandir aio_symlink aio_readlink aio_realpath aio_fcntl aio_ioctl 180 aio_scandir aio_symlink aio_readlink aio_realpath aio_fcntl aio_ioctl
181 aio_sync aio_fsync aio_syncfs aio_fdatasync aio_sync_file_range 181 aio_sync aio_fsync aio_syncfs aio_fdatasync aio_sync_file_range
278 IO::AIO::idle_timeout $seconds 278 IO::AIO::idle_timeout $seconds
279 IO::AIO::max_outstanding $maxreqs 279 IO::AIO::max_outstanding $maxreqs
280 IO::AIO::nreqs 280 IO::AIO::nreqs
281 IO::AIO::nready 281 IO::AIO::nready
282 IO::AIO::npending 282 IO::AIO::npending
283 IO::AIO::reinit
284
283 $nfd = IO::AIO::get_fdlimit [EXPERIMENTAL] 285 $nfd = IO::AIO::get_fdlimit [EXPERIMENTAL]
284 IO::AIO::min_fdlimit $nfd [EXPERIMENTAL] 286 IO::AIO::min_fdlimit $nfd [EXPERIMENTAL]
285 287
286 IO::AIO::sendfile $ofh, $ifh, $offset, $count 288 IO::AIO::sendfile $ofh, $ifh, $offset, $count
287 IO::AIO::fadvise $fh, $offset, $len, $advice 289 IO::AIO::fadvise $fh, $offset, $len, $advice
290
288 IO::AIO::mmap $scalar, $length, $prot, $flags[, $fh[, $offset]] 291 IO::AIO::mmap $scalar, $length, $prot, $flags[, $fh[, $offset]]
289 IO::AIO::munmap $scalar 292 IO::AIO::munmap $scalar
290 IO::AIO::mremap $scalar, $new_length, $flags[, $new_address] 293 IO::AIO::mremap $scalar, $new_length, $flags[, $new_address]
291 IO::AIO::madvise $scalar, $offset, $length, $advice 294 IO::AIO::madvise $scalar, $offset, $length, $advice
292 IO::AIO::mprotect $scalar, $offset, $length, $protect 295 IO::AIO::mprotect $scalar, $offset, $length, $protect
293 IO::AIO::munlock $scalar, $offset = 0, $length = undef 296 IO::AIO::munlock $scalar, $offset = 0, $length = undef
294 IO::AIO::munlockall 297 IO::AIO::munlockall
298
299 # stat extensions
300 $counter = IO::AIO::st_gen
301 $seconds = IO::AIO::st_atime, IO::AIO::st_mtime, IO::AIO::st_ctime, IO::AIO::st_btime
302 ($atime, $mtime, $ctime, $btime, ...) = IO::AIO::st_xtime
303 $nanoseconds = IO::AIO::st_atimensec, IO::AIO::st_mtimensec, IO::AIO::st_ctimensec, IO::AIO::st_btimensec
304 $seconds = IO::AIO::st_btimesec
305 ($atime, $mtime, $ctime, $btime, ...) = IO::AIO::st_xtimensec
306
307 # very much unportable syscalls
308 IO::AIO::splice $r_fh, $r_off, $w_fh, $w_off, $length, $flags
309 IO::AIO::tee $r_fh, $w_fh, $length, $flags
310 $actual_size = IO::AIO::pipesize $r_fh[, $new_size]
311 ($rfh, $wfh) = IO::AIO::pipe2 [$flags]
312 $fh = IO::AIO::memfd_create $pathname[, $flags]
313 $fh = IO::AIO::eventfd [$initval, [$flags]]
314 $fh = IO::AIO::timerfd_create $clockid[, $flags]
315 ($cur_interval, $cur_value) = IO::AIO::timerfd_settime $fh, $flags, $new_interval, $nbw_value
316 ($cur_interval, $cur_value) = IO::AIO::timerfd_gettime $fh
295 317
296=head2 API NOTES 318=head2 API NOTES
297 319
298All the C<aio_*> calls are more or less thin wrappers around the syscall 320All the C<aio_*> calls are more or less thin wrappers around the syscall
299with the same name (sans C<aio_>). The arguments are similar or identical, 321with the same name (sans C<aio_>). The arguments are similar or identical,
2423Example: create a pipe race-free w.r.t. threads and fork: 2445Example: create a pipe race-free w.r.t. threads and fork:
2424 2446
2425 my ($rfh, $wfh) = IO::AIO::pipe2 IO::AIO::O_CLOEXEC 2447 my ($rfh, $wfh) = IO::AIO::pipe2 IO::AIO::O_CLOEXEC
2426 or die "pipe2: $!\n"; 2448 or die "pipe2: $!\n";
2427 2449
2450=item $fh = IO::AIO::memfd_create $pathname[, $flags]
2451
2452This is a direct interface to the Linux L<memfd_create(2)> system
2453call. The (unhelpful) default for C<$flags> is C<0>, but your default
2454should be C<IO::AIO::MFD_CLOEXEC>.
2455
2456On success, the new memfd filehandle is returned, otherwise returns
2457C<undef>. If the memfd_create syscall is missing, fails with C<ENOSYS>.
2458
2459Please refer to L<memfd_create(2)> for more info on this call.
2460
2461The following C<$flags> values are available: C<IO::AIO::MFD_CLOEXEC>,
2462C<IO::AIO::MFD_ALLOW_SEALING> and C<IO::AIO::MFD_HUGETLB>.
2463
2464Example: create a new memfd.
2465
2466 my $fh = IO::AIO::memfd_create "somenameforprocfd", IO::AIO::MFD_CLOEXEC
2467 or die "m,emfd_create: $!\n";
2428=item $fh = IO::AIO::eventfd [$initval, [$flags]] 2468=item $fh = IO::AIO::eventfd [$initval, [$flags]]
2429 2469
2430This is a direct interface to the Linux L<eventfd(2)> system call. The 2470This is a direct interface to the Linux L<eventfd(2)> system call. The
2431(unhelpful) defaults for C<$initval> and C<$flags> are C<0> for both. 2471(unhelpful) defaults for C<$initval> and C<$flags> are C<0> for both.
2432 2472
2438The following symbol flag values are available: C<IO::AIO::EFD_CLOEXEC>, 2478The following symbol flag values are available: C<IO::AIO::EFD_CLOEXEC>,
2439C<IO::AIO::EFD_NONBLOCK> and C<IO::AIO::EFD_SEMAPHORE> (Linux 2.6.30). 2479C<IO::AIO::EFD_NONBLOCK> and C<IO::AIO::EFD_SEMAPHORE> (Linux 2.6.30).
2440 2480
2441Example: create a new eventfd filehandle: 2481Example: create a new eventfd filehandle:
2442 2482
2443 $fh = IO::AIO::eventfd 0, IO::AIO::O_CLOEXEC 2483 $fh = IO::AIO::eventfd 0, IO::AIO::EFD_CLOEXEC
2444 or die "eventfd: $!\n"; 2484 or die "eventfd: $!\n";
2445 2485
2446=item $fh = IO::AIO::timerfd_create $clockid[, $flags] 2486=item $fh = IO::AIO::timerfd_create $clockid[, $flags]
2447 2487
2448This is a direct interface to the Linux L<timerfd_create(2)> system call. The 2488This is a direct interface to the Linux L<timerfd_create(2)> system
2449(unhelpful) default for C<$flags> is C<0>. 2489call. The (unhelpful) default for C<$flags> is C<0>, but your default
2490should be C<IO::AIO::TFD_CLOEXEC>.
2450 2491
2451On success, the new timerfd filehandle is returned, otherwise returns 2492On success, the new timerfd filehandle is returned, otherwise returns
2452C<undef>. If the eventfd syscall is missing, fails with C<ENOSYS>. 2493C<undef>. If the timerfd_create syscall is missing, fails with C<ENOSYS>.
2453 2494
2454Please refer to L<timerfd_create(2)> for more info on this call. 2495Please refer to L<timerfd_create(2)> for more info on this call.
2455 2496
2456The following C<$clockid> values are 2497The following C<$clockid> values are
2457available: C<IO::AIO::CLOCK_REALTIME>, C<IO::AIO::CLOCK_MONOTONIC> 2498available: C<IO::AIO::CLOCK_REALTIME>, C<IO::AIO::CLOCK_MONOTONIC>

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines