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.306 by root, Wed Oct 16 09:11:35 2019 UTC vs.
Revision 1.312 by root, Tue Jul 27 18:46:06 2021 UTC

171use common::sense; 171use common::sense;
172 172
173use base 'Exporter'; 173use base 'Exporter';
174 174
175BEGIN { 175BEGIN {
176 our $VERSION = 4.73; 176 our $VERSION = 4.76;
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
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 283 IO::AIO::reinit
284 284
285 $nfd = IO::AIO::get_fdlimit [EXPERIMENTAL] 285 $nfd = IO::AIO::get_fdlimit
286 IO::AIO::min_fdlimit $nfd [EXPERIMENTAL] 286 IO::AIO::min_fdlimit $nfd
287 287
288 IO::AIO::sendfile $ofh, $ifh, $offset, $count 288 IO::AIO::sendfile $ofh, $ifh, $offset, $count
289 IO::AIO::fadvise $fh, $offset, $len, $advice 289 IO::AIO::fadvise $fh, $offset, $len, $advice
290 290
291 IO::AIO::mmap $scalar, $length, $prot, $flags[, $fh[, $offset]] 291 IO::AIO::mmap $scalar, $length, $prot, $flags[, $fh[, $offset]]
2220 2220
2221=over 4 2221=over 4
2222 2222
2223=item $numfd = IO::AIO::get_fdlimit 2223=item $numfd = IO::AIO::get_fdlimit
2224 2224
2225This function is I<EXPERIMENTAL> and subject to change.
2226
2227Tries to find the current file descriptor limit and returns it, or 2225Tries to find the current file descriptor limit and returns it, or
2228C<undef> and sets C<$!> in case of an error. The limit is one larger than 2226C<undef> and sets C<$!> in case of an error. The limit is one larger than
2229the highest valid file descriptor number. 2227the highest valid file descriptor number.
2230 2228
2231=item IO::AIO::min_fdlimit [$numfd] 2229=item IO::AIO::min_fdlimit [$numfd]
2232
2233This function is I<EXPERIMENTAL> and subject to change.
2234 2230
2235Try to increase the current file descriptor limit(s) to at least C<$numfd> 2231Try to increase the current file descriptor limit(s) to at least C<$numfd>
2236by changing the soft or hard file descriptor resource limit. If C<$numfd> 2232by changing the soft or hard file descriptor resource limit. If C<$numfd>
2237is missing, it will try to set a very high limit, although this is not 2233is missing, it will try to set a very high limit, although this is not
2238recommended when you know the actual minimum that you require. 2234recommended when you know the actual minimum that you require.
2333C<IO::AIO::MAP_POPULATE>, 2329C<IO::AIO::MAP_POPULATE>,
2334C<IO::AIO::MAP_NONBLOCK>, 2330C<IO::AIO::MAP_NONBLOCK>,
2335C<IO::AIO::MAP_FIXED>, 2331C<IO::AIO::MAP_FIXED>,
2336C<IO::AIO::MAP_GROWSDOWN>, 2332C<IO::AIO::MAP_GROWSDOWN>,
2337C<IO::AIO::MAP_32BIT>, 2333C<IO::AIO::MAP_32BIT>,
2338C<IO::AIO::MAP_HUGETLB> or 2334C<IO::AIO::MAP_HUGETLB>,
2339C<IO::AIO::MAP_STACK>. 2335C<IO::AIO::MAP_STACK>,
2336C<IO::AIO::MAP_FIXED_NOREPLACE>,
2337C<IO::AIO::MAP_SHARED_VALIDATE>,
2338C<IO::AIO::MAP_SYNC> or
2339C<IO::AIO::MAP_UNINITIALIZED>.
2340 2340
2341If C<$fh> is C<undef>, then a file descriptor of C<-1> is passed. 2341If C<$fh> is C<undef>, then a file descriptor of C<-1> is passed.
2342 2342
2343C<$offset> is the offset from the start of the file - it generally must be 2343C<$offset> is the offset from the start of the file - it generally must be
2344a multiple of C<IO::AIO::PAGESIZE> and defaults to C<0>. 2344a multiple of C<IO::AIO::PAGESIZE> and defaults to C<0>.
2413truncated. 2413truncated.
2414 2414
2415To accept name-less sockets, use C<undef> for C<$sockaddr> and C<0> for 2415To accept name-less sockets, use C<undef> for C<$sockaddr> and C<0> for
2416C<$sockaddr_maxlen>. 2416C<$sockaddr_maxlen>.
2417 2417
2418The main reasons to use this syscall rather than portable C«accept(2)> 2418The main reasons to use this syscall rather than portable C<accept(2)>
2419are that you can specify C<SOCK_NONBLOCK> and/or C<SOCK_CLOEXEC> 2419are that you can specify C<SOCK_NONBLOCK> and/or C<SOCK_CLOEXEC>
2420flags and you can accept name-less sockets by specifying C<0> for 2420flags and you can accept name-less sockets by specifying C<0> for
2421C<$sockaddr_maxlen>, which is sadly not possible with perl's interface to 2421C<$sockaddr_maxlen>, which is sadly not possible with perl's interface to
2422C<accept>. 2422C<accept>.
2423 2423
2488C<IO::AIO::MFD_ALLOW_SEALING> and C<IO::AIO::MFD_HUGETLB>. 2488C<IO::AIO::MFD_ALLOW_SEALING> and C<IO::AIO::MFD_HUGETLB>.
2489 2489
2490Example: create a new memfd. 2490Example: create a new memfd.
2491 2491
2492 my $fh = IO::AIO::memfd_create "somenameforprocfd", IO::AIO::MFD_CLOEXEC 2492 my $fh = IO::AIO::memfd_create "somenameforprocfd", IO::AIO::MFD_CLOEXEC
2493 or die "m,emfd_create: $!\n"; 2493 or die "memfd_create: $!\n";
2494
2495=item $fh = IO::AIO::pidfd_open $pid[, $flags]
2496
2497This is an interface to the Linux L<pidfd_open(2)> system call. The
2498default for C<$flags> is C<0>.
2499
2500On success, a new pidfd filehandle is returned (that is already set to
2501close-on-exec), otherwise returns C<undef>. If the syscall is missing,
2502fails with C<ENOSYS>.
2503
2504Example: open pid 6341 as pidfd.
2505
2506 my $fh = IO::AIO::pidfd_open 6341
2507 or die "pidfd_open: $!\n";
2508
2509=item $status = IO::AIO::pidfd_send_signal $pidfh, $signal[, $siginfo[, $flags]]
2510
2511This is an interface to the Linux L<pidfd_send_signal> system call. The
2512default for C<$siginfo> is C<undef> and the default for C<$flags> is C<0>.
2513
2514Returns the system call status. If the syscall is missing, fails with
2515C<ENOSYS>.
2516
2517When specified, C<$siginfo> must be a reference to a hash with one or more
2518of the following members:
2519
2520=over
2521
2522=item code - the C<si_code> member
2523
2524=item pid - the C<si_pid> member
2525
2526=item uid - the C<si_uid> member
2527
2528=item value_int - the C<si_value.sival_int> member
2529
2530=item value_ptr - the C<si_value.sival_ptr> member, specified as an integer
2531
2532=back
2533
2534Example: send a SIGKILL to the specified process.
2535
2536 my $status = IO::AIO::pidfd_send_signal $pidfh, 9, undef
2537 and die "pidfd_send_signal: $!\n";
2538
2539Example: send a SIGKILL to the specified process with extra data.
2540
2541 my $status = IO::AIO::pidfd_send_signal $pidfh, 9, { code => -1, value_int => 7 }
2542 and die "pidfd_send_signal: $!\n";
2543
2544=item $fh = IO::AIO::pidfd_getfd $pidfh, $targetfd[, $flags]
2545
2546This is an interface to the Linux L<pidfd_getfd> system call. The default
2547for C<$flags> is C<0>.
2548
2549On success, returns a dup'ed copy of the target file descriptor (specified
2550as an integer) returned (that is already set to close-on-exec), otherwise
2551returns C<undef>. If the syscall is missing, fails with C<ENOSYS>.
2552
2553Example: get a copy of standard error of another process and print soemthing to it.
2554
2555 my $errfh = IO::AIO::pidfd_getfd $pidfh, 2
2556 or die "pidfd_getfd: $!\n";
2557 print $errfh "stderr\n";
2558
2494=item $fh = IO::AIO::eventfd [$initval, [$flags]] 2559=item $fh = IO::AIO::eventfd [$initval, [$flags]]
2495 2560
2496This is a direct interface to the Linux L<eventfd(2)> system call. The 2561This is a direct interface to the Linux L<eventfd(2)> system call. The
2497(unhelpful) defaults for C<$initval> and C<$flags> are C<0> for both. 2562(unhelpful) defaults for C<$initval> and C<$flags> are C<0> for both.
2498 2563

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines