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.303 by root, Wed Apr 3 03:09:04 2019 UTC vs.
Revision 1.310 by root, Wed Dec 30 07:45:32 2020 UTC

171use common::sense; 171use common::sense;
172 172
173use base 'Exporter'; 173use base 'Exporter';
174 174
175BEGIN { 175BEGIN {
176 our $VERSION = 4.72; 176 our $VERSION = 4.75;
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]]
303 $nanoseconds = IO::AIO::st_atimensec, IO::AIO::st_mtimensec, IO::AIO::st_ctimensec, IO::AIO::st_btimensec 303 $nanoseconds = IO::AIO::st_atimensec, IO::AIO::st_mtimensec, IO::AIO::st_ctimensec, IO::AIO::st_btimensec
304 $seconds = IO::AIO::st_btimesec 304 $seconds = IO::AIO::st_btimesec
305 ($atime, $mtime, $ctime, $btime, ...) = IO::AIO::st_xtimensec 305 ($atime, $mtime, $ctime, $btime, ...) = IO::AIO::st_xtimensec
306 306
307 # very much unportable syscalls 307 # very much unportable syscalls
308 IO::AIO::accept4 $r_fh, $sockaddr, $sockaddr_len, $flags
308 IO::AIO::splice $r_fh, $r_off, $w_fh, $w_off, $length, $flags 309 IO::AIO::splice $r_fh, $r_off, $w_fh, $w_off, $length, $flags
309 IO::AIO::tee $r_fh, $w_fh, $length, $flags 310 IO::AIO::tee $r_fh, $w_fh, $length, $flags
310 $actual_size = IO::AIO::pipesize $r_fh[, $new_size] 311 $actual_size = IO::AIO::pipesize $r_fh[, $new_size]
311 ($rfh, $wfh) = IO::AIO::pipe2 [$flags] 312 ($rfh, $wfh) = IO::AIO::pipe2 [$flags]
312 $fh = IO::AIO::memfd_create $pathname[, $flags] 313 $fh = IO::AIO::memfd_create $pathname[, $flags]
1678C<aio_wd> callback, as future requests using the value will fail in the 1679C<aio_wd> callback, as future requests using the value will fail in the
1679expected way. 1680expected way.
1680 1681
1681=item IO::AIO::CWD 1682=item IO::AIO::CWD
1682 1683
1683This is a compiletime constant (object) that represents the process 1684This is a compile time constant (object) that represents the process
1684current working directory. 1685current working directory.
1685 1686
1686Specifying this object as working directory object for a pathname is as if 1687Specifying this object as working directory object for a pathname is as if
1687the pathname would be specified directly, without a directory object. For 1688the pathname would be specified directly, without a directory object. For
1688example, these calls are functionally identical: 1689example, these calls are functionally identical:
2219 2220
2220=over 4 2221=over 4
2221 2222
2222=item $numfd = IO::AIO::get_fdlimit 2223=item $numfd = IO::AIO::get_fdlimit
2223 2224
2224This function is I<EXPERIMENTAL> and subject to change.
2225
2226Tries to find the current file descriptor limit and returns it, or 2225Tries to find the current file descriptor limit and returns it, or
2227C<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
2228the highest valid file descriptor number. 2227the highest valid file descriptor number.
2229 2228
2230=item IO::AIO::min_fdlimit [$numfd] 2229=item IO::AIO::min_fdlimit [$numfd]
2231
2232This function is I<EXPERIMENTAL> and subject to change.
2233 2230
2234Try 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>
2235by 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>
2236is 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
2237recommended when you know the actual minimum that you require. 2234recommended when you know the actual minimum that you require.
2397Calls the C<munlockall> function. 2394Calls the C<munlockall> function.
2398 2395
2399On systems that do not implement C<munlockall>, this function returns 2396On systems that do not implement C<munlockall>, this function returns
2400ENOSYS, otherwise the return value of C<munlockall>. 2397ENOSYS, otherwise the return value of C<munlockall>.
2401 2398
2399=item $fh = IO::AIO::accept4 $r_fh, $sockaddr, $sockaddr_maxlen, $flags
2400
2401Uses the GNU/Linux C<accept4(2)> syscall, if available, to accept a socket
2402and return the new file handle on success, or sets C<$!> and returns
2403C<undef> on error.
2404
2405The remote name of the new socket will be stored in C<$sockaddr>, which
2406will be extended to allow for at least C<$sockaddr_maxlen> octets. If the
2407socket name does not fit into C<$sockaddr_maxlen> octets, this is signaled
2408by returning a longer string in C<$sockaddr>, which might or might not be
2409truncated.
2410
2411To accept name-less sockets, use C<undef> for C<$sockaddr> and C<0> for
2412C<$sockaddr_maxlen>.
2413
2414The main reasons to use this syscall rather than portable C<accept(2)>
2415are that you can specify C<SOCK_NONBLOCK> and/or C<SOCK_CLOEXEC>
2416flags and you can accept name-less sockets by specifying C<0> for
2417C<$sockaddr_maxlen>, which is sadly not possible with perl's interface to
2418C<accept>.
2419
2402=item IO::AIO::splice $r_fh, $r_off, $w_fh, $w_off, $length, $flags 2420=item IO::AIO::splice $r_fh, $r_off, $w_fh, $w_off, $length, $flags
2403 2421
2404Calls the GNU/Linux C<splice(2)> syscall, if available. If C<$r_off> or 2422Calls the GNU/Linux C<splice(2)> syscall, if available. If C<$r_off> or
2405C<$w_off> are C<undef>, then C<NULL> is passed for these, otherwise they 2423C<$w_off> are C<undef>, then C<NULL> is passed for these, otherwise they
2406should be the file offset. 2424should be the file offset.
2466C<IO::AIO::MFD_ALLOW_SEALING> and C<IO::AIO::MFD_HUGETLB>. 2484C<IO::AIO::MFD_ALLOW_SEALING> and C<IO::AIO::MFD_HUGETLB>.
2467 2485
2468Example: create a new memfd. 2486Example: create a new memfd.
2469 2487
2470 my $fh = IO::AIO::memfd_create "somenameforprocfd", IO::AIO::MFD_CLOEXEC 2488 my $fh = IO::AIO::memfd_create "somenameforprocfd", IO::AIO::MFD_CLOEXEC
2471 or die "m,emfd_create: $!\n"; 2489 or die "memfd_create: $!\n";
2490
2491=item $fh = IO::AIO::pidfd_open $pid[, $flags]
2492
2493This is an interface to the Linux L<pidfd_open(2)> system call. The
2494default for C<$flags> is C<0>.
2495
2496On success, a new pidfd filehandle is returned (that is already set to
2497close-on-exec), otherwise returns C<undef>. If the syscall is missing,
2498fails with C<ENOSYS>.
2499
2500Example: open pid 6341 as pidfd.
2501
2502 my $fh = IO::AIO::pidfd_open 6341
2503 or die "pidfd_open: $!\n";
2504
2505=item $status = IO::AIO::pidfd_send_signal $pidfh, $signal[, $siginfo[, $flags]]
2506
2507This is an interface to the Linux L<pidfd_send_signal> system call. The
2508default for C<$siginfo> is C<undef> and the default for C<$flags> is C<0>.
2509
2510Returns the system call status. If the syscall is missing, fails with
2511C<ENOSYS>.
2512
2513When specified, C<$siginfo> must be a reference to a hash with one or more
2514of the following members:
2515
2516=over
2517
2518=item code - the C<si_code> member
2519
2520=item pid - the C<si_pid> member
2521
2522=item uid - the C<si_uid> member
2523
2524=item value_int - the C<si_value.sival_int> member
2525
2526=item value_ptr - the C<si_value.sival_ptr> member, specified as an integer
2527
2528=back
2529
2530Example: send a SIGKILL to the specified process.
2531
2532 my $status = IO::AIO::pidfd_send_signal $pidfh, 9, undef
2533 and die "pidfd_send_signal: $!\n";
2534
2535Example: send a SIGKILL to the specified process with extra data.
2536
2537 my $status = IO::AIO::pidfd_send_signal $pidfh, 9, { code => -1, value_int => 7 }
2538 and die "pidfd_send_signal: $!\n";
2539
2540=item $fh = IO::AIO::pidfd_getfd $pidfh, $targetfd[, $flags]
2541
2542This is an interface to the Linux L<pidfd_getfd> system call. The default
2543for C<$flags> is C<0>.
2544
2545On success, returns a dup'ed copy of the target file descriptor (specified
2546as an integer) returned (that is already set to close-on-exec), otherwise
2547returns C<undef>. If the syscall is missing, fails with C<ENOSYS>.
2548
2549Example: get a copy of standard error of another process and print soemthing to it.
2550
2551 my $errfh = IO::AIO::pidfd_getfd $pidfh, 2
2552 or die "pidfd_getfd: $!\n";
2553 print $errfh "stderr\n";
2554
2472=item $fh = IO::AIO::eventfd [$initval, [$flags]] 2555=item $fh = IO::AIO::eventfd [$initval, [$flags]]
2473 2556
2474This is a direct interface to the Linux L<eventfd(2)> system call. The 2557This is a direct interface to the Linux L<eventfd(2)> system call. The
2475(unhelpful) defaults for C<$initval> and C<$flags> are C<0> for both. 2558(unhelpful) defaults for C<$initval> and C<$flags> are C<0> for both.
2476 2559
2668known issue, rather than a bug. 2751known issue, rather than a bug.
2669 2752
2670=head1 SEE ALSO 2753=head1 SEE ALSO
2671 2754
2672L<AnyEvent::AIO> for easy integration into event loops, L<Coro::AIO> for a 2755L<AnyEvent::AIO> for easy integration into event loops, L<Coro::AIO> for a
2673more natural syntax. 2756more natural syntax and L<IO::FDPass> for file descriptor passing.
2674 2757
2675=head1 AUTHOR 2758=head1 AUTHOR
2676 2759
2677 Marc Lehmann <schmorp@schmorp.de> 2760 Marc Lehmann <schmorp@schmorp.de>
2678 http://home.schmorp.de/ 2761 http://home.schmorp.de/

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines