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.315 by root, Mon Sep 5 00:03:32 2022 UTC vs.
Revision 1.319 by root, Wed Sep 27 03:09:57 2023 UTC

171use common::sense; 171use common::sense;
172 172
173use base 'Exporter'; 173use base 'Exporter';
174 174
175BEGIN { 175BEGIN {
176 our $VERSION = 4.77; 176 our $VERSION = 4.80;
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
195 max_poll_time max_poll_reqs 195 max_poll_time max_poll_reqs
196 sendfile fadvise madvise 196 sendfile fadvise madvise
197 mmap munmap mremap munlock munlockall 197 mmap munmap mremap munlock munlockall
198 198
199 accept4 tee splice pipe2 pipesize 199 accept4 tee splice pipe2 pipesize
200 fexecve memfd_create eventfd 200 fexecve mount umount memfd_create eventfd
201 timerfd_create timerfd_settime timerfd_gettime 201 timerfd_create timerfd_settime timerfd_gettime
202 pidfd_open pidfd_send_signal pidfd_getfd); 202 pidfd_open pidfd_send_signal pidfd_getfd);
203 203
204 push @AIO_REQ, qw(aio_busy); # not exported 204 push @AIO_REQ, qw(aio_busy); # not exported
205 205
327 327
328 $fh = IO::AIO::pidfd_open $pid[, $flags] 328 $fh = IO::AIO::pidfd_open $pid[, $flags]
329 $status = IO::AIO::pidfd_send_signal $pidfh, $signal[, $siginfo[, $flags]] 329 $status = IO::AIO::pidfd_send_signal $pidfh, $signal[, $siginfo[, $flags]]
330 $fh = IO::AIO::pidfd_getfd $pidfh, $targetfd[, $flags] 330 $fh = IO::AIO::pidfd_getfd $pidfh, $targetfd[, $flags]
331 331
332 $retval = IO::AIO::mount $special, $path, $fstype, $flags = 0, $data = undef
333 $retval = IO::AIO::umount $path, $flags = 0
334
332=head2 API NOTES 335=head2 API NOTES
333 336
334All the C<aio_*> calls are more or less thin wrappers around the syscall 337All the C<aio_*> calls are more or less thin wrappers around the syscall
335with the same name (sans C<aio_>). The arguments are similar or identical, 338with the same name (sans C<aio_>). The arguments are similar or identical,
336and they all accept an additional (and optional) C<$callback> argument 339and they all accept an additional (and optional) C<$callback> argument
410=item aio_open $pathname, $flags, $mode, $callback->($fh) 413=item aio_open $pathname, $flags, $mode, $callback->($fh)
411 414
412Asynchronously open or create a file and call the callback with a newly 415Asynchronously open or create a file and call the callback with a newly
413created filehandle for the file (or C<undef> in case of an error). 416created filehandle for the file (or C<undef> in case of an error).
414 417
415The pathname passed to C<aio_open> must be absolute. See API NOTES, above,
416for an explanation.
417
418The C<$flags> argument is a bitmask. See the C<Fcntl> module for a 418The C<$flags> argument is a bitmask. See the C<Fcntl> module for a
419list. They are the same as used by C<sysopen>. 419list. They are the same as used by C<sysopen>.
420 420
421Likewise, C<$mode> specifies the mode of the newly created file, if it 421Likewise, C<$mode> specifies the mode of the newly created file, if it
422didn't exist and C<O_CREAT> has been given, just like perl's C<sysopen>, 422didn't exist and C<O_CREAT> has been given, just like perl's C<sysopen>,
581 581
582Works almost exactly like perl's C<stat> or C<lstat> in void context. The 582Works almost exactly like perl's C<stat> or C<lstat> in void context. The
583callback will be called after the stat and the results will be available 583callback will be called after the stat and the results will be available
584using C<stat _> or C<-s _> and other tests (with the exception of C<-B> 584using C<stat _> or C<-s _> and other tests (with the exception of C<-B>
585and C<-T>). 585and C<-T>).
586
587The pathname passed to C<aio_stat> must be absolute. See API NOTES, above,
588for an explanation.
589 586
590Currently, the stats are always 64-bit-stats, i.e. instead of returning an 587Currently, the stats are always 64-bit-stats, i.e. instead of returning an
591error when stat'ing a large file, the results will be silently truncated 588error when stat'ing a large file, the results will be silently truncated
592unless perl itself is compiled with large file support. 589unless perl itself is compiled with large file support.
593 590
978 my @stat = stat $src_fh; # hmm, might block over nfs? 975 my @stat = stat $src_fh; # hmm, might block over nfs?
979 976
980 aioreq_pri $pri; 977 aioreq_pri $pri;
981 add $grp aio_open $dst, O_CREAT | O_WRONLY | O_TRUNC, 0200, sub { 978 add $grp aio_open $dst, O_CREAT | O_WRONLY | O_TRUNC, 0200, sub {
982 if (my $dst_fh = $_[0]) { 979 if (my $dst_fh = $_[0]) {
980
981 # best-effort preallocate
982 aioreq_pri $pri;
983 add $grp aio_allocate $dst_fh, IO::AIO::FALLOC_FL_KEEP_SIZE, 0, $stat[7], sub { };
984
983 aioreq_pri $pri; 985 aioreq_pri $pri;
984 add $grp aio_sendfile $dst_fh, $src_fh, 0, $stat[7], sub { 986 add $grp aio_sendfile $dst_fh, $src_fh, 0, $stat[7], sub {
985 if ($_[0] == $stat[7]) { 987 if ($_[0] == $stat[7]) {
986 $grp->result (0); 988 $grp->result (0);
987 close $src_fh; 989 close $src_fh;
1351C<FS_XFLAG_REALTIME>, C<FS_XFLAG_PREALLOC>, C<FS_XFLAG_IMMUTABLE>, C<FS_XFLAG_APPEND>, 1353C<FS_XFLAG_REALTIME>, C<FS_XFLAG_PREALLOC>, C<FS_XFLAG_IMMUTABLE>, C<FS_XFLAG_APPEND>,
1352C<FS_XFLAG_SYNC>, C<FS_XFLAG_NOATIME>, C<FS_XFLAG_NODUMP>, C<FS_XFLAG_RTINHERIT>, 1354C<FS_XFLAG_SYNC>, C<FS_XFLAG_NOATIME>, C<FS_XFLAG_NODUMP>, C<FS_XFLAG_RTINHERIT>,
1353C<FS_XFLAG_PROJINHERIT>, C<FS_XFLAG_NOSYMLINKS>, C<FS_XFLAG_EXTSIZE>, C<FS_XFLAG_EXTSZINHERIT>, 1355C<FS_XFLAG_PROJINHERIT>, C<FS_XFLAG_NOSYMLINKS>, C<FS_XFLAG_EXTSIZE>, C<FS_XFLAG_EXTSZINHERIT>,
1354C<FS_XFLAG_NODEFRAG>, C<FS_XFLAG_FILESTREAM>, C<FS_XFLAG_DAX>, C<FS_XFLAG_HASATTR>, 1356C<FS_XFLAG_NODEFRAG>, C<FS_XFLAG_FILESTREAM>, C<FS_XFLAG_DAX>, C<FS_XFLAG_HASATTR>,
1355 1357
1358C<BLKROSET>, C<BLKROGET>, C<BLKRRPART>, C<BLKGETSIZE>, C<BLKFLSBUF>, C<BLKRASET>,
1359C<BLKRAGET>, C<BLKFRASET>, C<BLKFRAGET>, C<BLKSECTSET>, C<BLKSECTGET>, C<BLKSSZGET>,
1360C<BLKBSZGET>, C<BLKBSZSET>, C<BLKGETSIZE64>,
1361
1362
1356=item aio_sync $callback->($status) 1363=item aio_sync $callback->($status)
1357 1364
1358Asynchronously call sync and call the callback when finished. 1365Asynchronously call sync and call the callback when finished.
1359 1366
1360=item aio_fsync $fh, $callback->($status) 1367=item aio_fsync $fh, $callback->($status)
2238=item $retval = IO::AIO::fexecve $fh, $argv, $envp 2245=item $retval = IO::AIO::fexecve $fh, $argv, $envp
2239 2246
2240A more-or-less direct equivalent to the POSIX C<fexecve> functions, which 2247A more-or-less direct equivalent to the POSIX C<fexecve> functions, which
2241allows you to specify the program to be executed via a file descriptor (or 2248allows you to specify the program to be executed via a file descriptor (or
2242handle). Returns C<-1> and sets errno to C<ENOSYS> if not available. 2249handle). Returns C<-1> and sets errno to C<ENOSYS> if not available.
2250
2251=item $retval = IO::AIO::mount $special, $path, $fstype, $flags = 0, $data = undef
2252
2253Calls the GNU/Linux mount syscall with the given arguments. All except
2254C<$flags> are strings, and if C<$data> is C<undef>, a C<NULL> will be
2255passed.
2256
2257The following values for C<$flags> are available:
2258
2259C<IO::AIO::MS_RDONLY>, C<IO::AIO::MS_NOSUID>, C<IO::AIO::MS_NODEV>, C<IO::AIO::MS_NOEXEC>, C<IO::AIO::MS_SYNCHRONOUS>,
2260C<IO::AIO::MS_REMOUNT>, C<IO::AIO::MS_MANDLOCK>, C<IO::AIO::MS_DIRSYNC>, C<IO::AIO::MS_NOATIME>,
2261C<IO::AIO::MS_NODIRATIME>, C<IO::AIO::MS_BIND>, C<IO::AIO::MS_MOVE>, C<IO::AIO::MS_REC>, C<IO::AIO::MS_SILENT>,
2262C<IO::AIO::MS_POSIXACL>, C<IO::AIO::MS_UNBINDABLE>, C<IO::AIO::MS_PRIVATE>, C<IO::AIO::MS_SLAVE>, C<IO::AIO::MS_SHARED>,
2263C<IO::AIO::MS_RELATIME>, C<IO::AIO::MS_KERNMOUNT>, C<IO::AIO::MS_I_VERSION>, C<IO::AIO::MS_STRICTATIME>,
2264C<IO::AIO::MS_LAZYTIME>, C<IO::AIO::MS_ACTIVE>, C<IO::AIO::MS_NOUSER>, C<IO::AIO::MS_RMT_MASK>, C<IO::AIO::MS_MGC_VAL> and
2265C<IO::AIO::MS_MGC_MSK>.
2266
2267=item $retval = IO::AIO::umount $path, $flags = 0
2268
2269Invokes the GNU/Linux C<umount> or C<umount2> syscalls. Always calls
2270C<umount> if C<$flags> is C<0>, otherwqise always tries to call
2271C<umount2>.
2272
2273The following C<$flags> are available:
2274
2275C<IO::AIO::MNT_FORCE>, C<IO::AIO::MNT_DETACH>, C<IO::AIO::MNT_EXPIRE> and C<IO::AIO::UMOUNT_NOFOLLOW>.
2243 2276
2244=item $numfd = IO::AIO::get_fdlimit 2277=item $numfd = IO::AIO::get_fdlimit
2245 2278
2246Tries to find the current file descriptor limit and returns it, or 2279Tries to find the current file descriptor limit and returns it, or
2247C<undef> and sets C<$!> in case of an error. The limit is one larger than 2280C<undef> and sets C<$!> in case of an error. The limit is one larger than

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines