.\" -*- mode: troff; coding: utf-8 -*- .\" Automatically generated by Pod::Man 5.01 (Pod::Simple 3.43) .\" .\" Standard preamble: .\" ======================================================================== .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" \*(C` and \*(C' are quotes in nroff, nothing in troff, for use with C<>. .ie n \{\ . ds C` "" . ds C' "" 'br\} .el\{\ . ds C` . ds C' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is >0, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .\" .\" Avoid warning from groff about undefined register 'F'. .de IX .. .nr rF 0 .if \n(.g .if rF .nr rF 1 .if (\n(rF:(\n(.g==0)) \{\ . if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . if !\nF==2 \{\ . nr % 0 . nr F 2 . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "POSIX::2008 3pm" .TH POSIX::2008 3pm 2024-03-07 "perl v5.38.2" "User Contributed Perl Documentation" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH NAME POSIX::2008 \- Perl interface to POSIX.1\-2008 .SH SYNOPSIS .IX Header "SYNOPSIS" .Vb 1 \& use POSIX::2008 qw(:fcntl openat pwrite); \& \& sysopen my $dh, \*(Aq/tmp\*(Aq, O_RDONLY|O_DIRECTORY|O_NOFOLLOW \& or die \*(AqDafuq?\*(Aq; \& my $fh = openat($dh, \*(Aqfoobar\*(Aq, O_RDWR|O_CREAT); \& pwrite($fh, \*(Aqfuckyounsa\*(Aq, 10, 0); .Ve .SH DESCRIPTION .IX Header "DESCRIPTION" POSIX::2008 contains many of the interfaces specified by POSIX.1\-2008 that the core POSIX module withholds, implements in Perl or fucked up. .PP It also contains a few nonstandard interfaces present in Linux, BSD and Solaris that are extensions of the POSIX interfaces. .PP This module is provided "as is" unless someone volunteers to maintain it. Use at your own risk. .SH "FILE DESCRIPTORS AND HANDLES" .IX Header "FILE DESCRIPTORS AND HANDLES" Since version 0.05, all I/O functions that take numeric file descriptors also accept Perl file or directory handles, except for \f(CWfdopen()\fR and \&\f(CWfdopendir()\fR. .PP Since version 0.22, returned handles support IO::Handle methods. .SH "SYSTEM CALL RETURN VALUES" .IX Header "SYSTEM CALL RETURN VALUES" A system call return value of \-1 meaning "error" is mapped to undef. .PP A system call return value of 0 meaning "success" is mapped to "0 but true". .PP For system calls where 0 does not just mean "success", 0 is returned unchanged. These are \f(CWcreat()\fR, \f(CWopen()\fR, \&\f(CWread()\fR, \f(CWwrite()\fR, \f(CWreadv()\fR, \&\f(CWwritev()\fR, \f(CWpread()\fR, \f(CWpwrite()\fR, \&\f(CWpreadv()\fR, \f(CWpwritev()\fR, \f(CWpreadv2()\fR, \&\f(CWpwritev2()\fR, \f(CWgetpriority()\fR, \&\f(CWnice()\fR. \f(CWopenat()\fR gets a special treatment in this regard, see below. .SH FUNCTIONS .IX Header "FUNCTIONS" .ie n .IP """a64l""" 4 .el .IP \f(CWa64l\fR 4 .IX Item "a64l" l = a64l(s); .ie n .IP """abort""" 4 .el .IP \f(CWabort\fR 4 .IX Item "abort" \&\fBabort()\fR; .ie n .IP """abs""" 4 .el .IP \f(CWabs\fR 4 .IX Item "abs" ui = abs(i); .Sp Calls \f(CWllabs()\fR, \f(CWlabs()\fR, or \f(CWabs()\fR, whichever is the maximum supported by your system. .Sp Note that the library functions use signed integers, so \f(CWabs(~0)\fR is 1. If you don't want that, use \f(CWCORE::abs()\fR. .ie n .IP """access""" 4 .el .IP \f(CWaccess\fR 4 .IX Item "access" ret = access(path, mode); .Sp \&\fINew in version 0.08.\fR .ie n .IP """acos""" 4 .el .IP \f(CWacos\fR 4 .IX Item "acos" y = acos(x); .ie n .IP """acosh""" 4 .el .IP \f(CWacosh\fR 4 .IX Item "acosh" y = acosh(x); .ie n .IP """alarm""" 4 .el .IP \f(CWalarm\fR 4 .IX Item "alarm" remaining_sec = alarm(sec); .ie n .IP """asin""" 4 .el .IP \f(CWasin\fR 4 .IX Item "asin" y = asin(x); .ie n .IP """asinh""" 4 .el .IP \f(CWasinh\fR 4 .IX Item "asinh" y = asinh(x); .ie n .IP """atan2""" 4 .el .IP \f(CWatan2\fR 4 .IX Item "atan2" z = atan2(y, x); .ie n .IP """atan""" 4 .el .IP \f(CWatan\fR 4 .IX Item "atan" y = atan(x); .ie n .IP """atanh""" 4 .el .IP \f(CWatanh\fR 4 .IX Item "atanh" y = atanh(x); .ie n .IP """atof""" 4 .el .IP \f(CWatof\fR 4 .IX Item "atof" f = atof(s); .ie n .IP """atoi""" 4 .el .IP \f(CWatoi\fR 4 .IX Item "atoi" i = atoi(s); .Sp Calls \f(CWatoll()\fR, \f(CWatol()\fR, or \f(CWatoi()\fR, whichever is the maximum supported by your system. This is of course silly because you could just use \f(CWint()\fR. .Sp \&\fIChanged in version 0.19:\fR Deprecated \fIatol\fR and \fIatoll\fR now covered by \&\fIatoi\fR. .ie n .IP """basename""" 4 .el .IP \f(CWbasename\fR 4 .IX Item "basename" s = basename(path); .ie n .IP """cabs""" 4 .el .IP \f(CWcabs\fR 4 .IX Item "cabs" r = cabs(re, im); .ie n .IP """cacos""" 4 .el .IP \f(CWcacos\fR 4 .IX Item "cacos" (re, im) = cacos(re, im); .ie n .IP """cacosh""" 4 .el .IP \f(CWcacosh\fR 4 .IX Item "cacosh" (re, im) = cacosh(re, im); .ie n .IP """carg""" 4 .el .IP \f(CWcarg\fR 4 .IX Item "carg" phi = carg(re, im); .ie n .IP """casin""" 4 .el .IP \f(CWcasin\fR 4 .IX Item "casin" y = casin(x); .ie n .IP """casinh""" 4 .el .IP \f(CWcasinh\fR 4 .IX Item "casinh" (re, im) = casinh(re, im); .ie n .IP """catan""" 4 .el .IP \f(CWcatan\fR 4 .IX Item "catan" (re, im) = catan(re, im); .ie n .IP """catanh""" 4 .el .IP \f(CWcatanh\fR 4 .IX Item "catanh" (re, im) = catanh(re, im); .ie n .IP """catclose""" 4 .el .IP \f(CWcatclose\fR 4 .IX Item "catclose" ret = catclose(catd); .ie n .IP """catgets""" 4 .el .IP \f(CWcatgets\fR 4 .IX Item "catgets" s = catgets(catd, set_id, msg_id, dflt_string); .ie n .IP """catopen""" 4 .el .IP \f(CWcatopen\fR 4 .IX Item "catopen" catd = catopen(name, flag); .ie n .IP """cbrt""" 4 .el .IP \f(CWcbrt\fR 4 .IX Item "cbrt" y = cbrt(x); .ie n .IP """ccos""" 4 .el .IP \f(CWccos\fR 4 .IX Item "ccos" (re, im) = ccos(re, im); .ie n .IP """ccosh""" 4 .el .IP \f(CWccosh\fR 4 .IX Item "ccosh" (re, im) = ccosh(re, im); .ie n .IP """ceil""" 4 .el .IP \f(CWceil\fR 4 .IX Item "ceil" y = ceil(x); .ie n .IP """cexp""" 4 .el .IP \f(CWcexp\fR 4 .IX Item "cexp" (re, im) = cexp(re, im); .Sp \&\fINew in version 0.19.\fR .ie n .IP """chdir""" 4 .el .IP \f(CWchdir\fR 4 .IX Item "chdir" ret = chdir(dir); .Sp \&\f(CW\*(C`dir\*(C'\fR can be a path, a Perl file or directory handle, or a file descriptor. .Sp \&\fIChanged in version 0.19:\fR Deprecated \fIfchdir\fR now covered by \fIchdir\fR. .ie n .IP """chmod""" 4 .el .IP \f(CWchmod\fR 4 .IX Item "chmod" ret = chmod(what, mode); .Sp \&\f(CW\*(C`what\*(C'\fR can be a path, a Perl file or directory handle (see "NOTES"), or a file descriptor. .Sp \&\fIChanged in version 0.19:\fR Deprecated \fIfchmod\fR now covered by \fIchmod\fR. .ie n .IP """chown""" 4 .el .IP \f(CWchown\fR 4 .IX Item "chown" ret = chown(what, uid, gid); .Sp \&\f(CW\*(C`what\*(C'\fR can be a path, a Perl file or directory handle (see "NOTES"), or a file descriptor. .Sp \&\fIChanged in version 0.19:\fR Deprecated \fIfchown\fR now covered by \fIchown\fR. .ie n .IP """cimag""" 4 .el .IP \f(CWcimag\fR 4 .IX Item "cimag" im = cimag(re, im); .ie n .IP """clock""" 4 .el .IP \f(CWclock\fR 4 .IX Item "clock" t = \fBclock()\fR .Sp \&\fINew in version 0.08.\fR .ie n .IP """clock_getcpuclockid""" 4 .el .IP \f(CWclock_getcpuclockid\fR 4 .IX Item "clock_getcpuclockid" clock_id = clock_getcpuclockid(pid); .Sp pid defaults to \f(CW$$\fR. Returns undef on error. .ie n .IP """clock_getres""" 4 .el .IP \f(CWclock_getres\fR 4 .IX Item "clock_getres" (sec, nsec) = clock_getres(clock_id); .Sp clock_id defaults to \f(CW\*(C`CLOCK_REALTIME\*(C'\fR. Returns empty list on error. .ie n .IP """clock_gettime""" 4 .el .IP \f(CWclock_gettime\fR 4 .IX Item "clock_gettime" (sec, nsec) = clock_gettime(clock_id); .Sp clock_id defaults to \f(CW\*(C`CLOCK_REALTIME\*(C'\fR. Returns empty list on error. .ie n .IP """clock_nanosleep""" 4 .el .IP \f(CWclock_nanosleep\fR 4 .IX Item "clock_nanosleep" (rem_sec, rem_nsec) = clock_nanosleep(clock_id, flags, sec, nsec); .Sp In scalar context returns the remaining seconds as a floating point number. .ie n .IP """clock_settime""" 4 .el .IP \f(CWclock_settime\fR 4 .IX Item "clock_settime" ret = clock_settime(clock_id, sec, nsec); .ie n .IP """clog""" 4 .el .IP \f(CWclog\fR 4 .IX Item "clog" (re, im) = clog(re, im); .ie n .IP """close""" 4 .el .IP \f(CWclose\fR 4 .IX Item "close" ret = close(fd); .ie n .IP """confstr""" 4 .el .IP \f(CWconfstr\fR 4 .IX Item "confstr" s = confstr(name); .Sp \&\fIname\fR is one of the \f(CW\*(C`_CS_*\*(C'\fR integer constants. .Sp Returns undef on error. .ie n .IP """conj""" 4 .el .IP \f(CWconj\fR 4 .IX Item "conj" (re, im) = conj(re, im); .ie n .IP """copysign""" 4 .el .IP \f(CWcopysign\fR 4 .IX Item "copysign" xs = copysign(x, y); .ie n .IP """cos""" 4 .el .IP \f(CWcos\fR 4 .IX Item "cos" y = cos(x); .ie n .IP """cosh""" 4 .el .IP \f(CWcosh\fR 4 .IX Item "cosh" y = cosh(x); .ie n .IP """cpow""" 4 .el .IP \f(CWcpow\fR 4 .IX Item "cpow" (re, im) = cpow(re_x, im_x, re_y, im_y); .ie n .IP """cproj""" 4 .el .IP \f(CWcproj\fR 4 .IX Item "cproj" (re, im) = cproj(re, im); .ie n .IP """creal""" 4 .el .IP \f(CWcreal\fR 4 .IX Item "creal" re = creal(re, im); .ie n .IP """creat""" 4 .el .IP \f(CWcreat\fR 4 .IX Item "creat" ret = creat(path, mode=0666); .Sp \&\fINew in version 0.22.\fR .ie n .IP """csin""" 4 .el .IP \f(CWcsin\fR 4 .IX Item "csin" (re, im) = csin(re, im); .ie n .IP """csinh""" 4 .el .IP \f(CWcsinh\fR 4 .IX Item "csinh" (re, im) = csinh(re, im); .ie n .IP """csqrt""" 4 .el .IP \f(CWcsqrt\fR 4 .IX Item "csqrt" (re, im) = csqrt(re, im); .ie n .IP """ctan""" 4 .el .IP \f(CWctan\fR 4 .IX Item "ctan" (re, im) = ctan(re, im); .ie n .IP """ctanh""" 4 .el .IP \f(CWctanh\fR 4 .IX Item "ctanh" (re, im) = ctanh(re, im); .ie n .IP """dirname""" 4 .el .IP \f(CWdirname\fR 4 .IX Item "dirname" name = dirname(path); .ie n .IP """div""" 4 .el .IP \f(CWdiv\fR 4 .IX Item "div" (quot, rem) = div(numer, denom); .Sp Calls \f(CWlldiv()\fR, \f(CWldiv()\fR, or \f(CWdiv()\fR, whichever is the maximum supported by your system. .Sp Note that the library functions use signed integers, so \f(CW\*(C`div(~0, 1)\*(C'\fR is \&\f(CW\*(C`(\-1, 0)\*(C'\fR. If you don't want that, use Perls \f(CWint()\fR, \f(CW\*(C`/\*(C'\fR and \f(CW\*(C`%\*(C'\fR. .Sp \&\fIChanged in version 0.19:\fR Deprecated \fIldiv\fR and \fIlldiv\fR now covered by \&\fIdiv\fR. .ie n .IP """dlclose""" 4 .el .IP \f(CWdlclose\fR 4 .IX Item "dlclose" dlclose(dlhandle); .ie n .IP """dlerror""" 4 .el .IP \f(CWdlerror\fR 4 .IX Item "dlerror" \&\fBdlerror()\fR; .ie n .IP """dlopen""" 4 .el .IP \f(CWdlopen\fR 4 .IX Item "dlopen" dlhandle = dlopen(file, mode); .ie n .IP """dlsym""" 4 .el .IP \f(CWdlsym\fR 4 .IX Item "dlsym" addr = dlsym(dlhandle, name); .ie n .IP """drand48""" 4 .el .IP \f(CWdrand48\fR 4 .IX Item "drand48" r = \fBdrand48()\fR; .ie n .IP """endutxent""" 4 .el .IP \f(CWendutxent\fR 4 .IX Item "endutxent" \&\fBendutxent()\fR; .ie n .IP """erand48""" 4 .el .IP \f(CWerand48\fR 4 .IX Item "erand48" (r, X0, X1, X2) = erand48(X0, X1, X2); .ie n .IP """erf""" 4 .el .IP \f(CWerf\fR 4 .IX Item "erf" y = erf(x); .ie n .IP """erfc""" 4 .el .IP \f(CWerfc\fR 4 .IX Item "erfc" y = erfc(x); .ie n .IP """execveat""" 4 .el .IP \f(CWexecveat\fR 4 .IX Item "execveat" execveat(dirfd, path, args, env=undef, flags=0); .Sp The \fBexecveat()\fR system call is a nonstandard extension present in Linux. See also \f(CWfexecve()\fR. .Sp It executes the program referred to by \fIpath\fR, which is interpreted relative to \fIdirfd\fR as with the other \fI*at\fR functions, passing \fIargs\fR as its command-line arguments and optionally \fIenv\fR as its environment. .Sp \&\fIargs\fR must be an array reference and, by convention, \fIargs\->[0]\fR should be the name of the program being executed. .Sp \&\fIenv\fR must be a hash reference. If omitted or undef, the environment of the calling proces is used (which you can manipulate via \f(CW%ENV\fR). .Sp \&\fIflags\fR is a bit mask that can include zero or more of the flags \&\f(CW\*(C`AT_EMPTY_PATH\*(C'\fR, \f(CW\*(C`AT_SYMLINK_NOFOLLOW\*(C'\fR. .Sp \&\fIpath\fR is executed "as is", i.e. no \f(CW\*(C`PATH\*(C'\fR search or interpretation of shell metacharacters takes place as opposed to Perl's built-in \&\f(CW\*(C`exec\*(C'\fR. .Sp Returns undef on error, otherwise it doesn't return. .Sp Usage example: .Sp .Vb 2 \& sysopen my $dh, \*(Aq/usr\*(Aq, O_DIRECTORY|O_PATH; \& execveat($dh, \*(Aqbin/date\*(Aq, [qw(date +%T)], {TZ => \*(AqUTC\*(Aq}, AT_SYMLINK_NOFOLLOW); .Ve .Sp \&\fINew in version 0.22.\fR .ie n .IP """exp""" 4 .el .IP \f(CWexp\fR 4 .IX Item "exp" y = exp(x); .ie n .IP """exp2""" 4 .el .IP \f(CWexp2\fR 4 .IX Item "exp2" y = exp2(x); .ie n .IP """expm1""" 4 .el .IP \f(CWexpm1\fR 4 .IX Item "expm1" y = expm1(x); .ie n .IP """faccessat""" 4 .el .IP \f(CWfaccessat\fR 4 .IX Item "faccessat" ret = faccessat(dirfd, path, amode, flags=0); .Sp \&\fIflags\fR is the bitwise OR of zero or more of \f(CW\*(C`AT_EACCESS\*(C'\fR, \&\f(CW\*(C`AT_SYMLINK_NOFOLLOW\*(C'\fR. .ie n .IP """fchmodat""" 4 .el .IP \f(CWfchmodat\fR 4 .IX Item "fchmodat" ret = fchmodat(dirfd, path, mode, flags=0); .Sp \&\fIflags\fR can be 0 or \f(CW\*(C`AT_SYMLINK_NOFOLLOW\*(C'\fR. Your system might support a different set of flags. .ie n .IP """fchownat""" 4 .el .IP \f(CWfchownat\fR 4 .IX Item "fchownat" ret = fchownat(dirfd, path, uid, gid, flags=0); .Sp \&\fIflags\fR can be 0 or \f(CW\*(C`AT_SYMLINK_NOFOLLOW\*(C'\fR. Your system might support a different set of flags. .ie n .IP """fdatasync""" 4 .el .IP \f(CWfdatasync\fR 4 .IX Item "fdatasync" ret = fdatasync(fd); .ie n .IP """fdopen""" 4 .el .IP \f(CWfdopen\fR 4 .IX Item "fdopen" ret = fdopen(fd, mode); .Sp Returns a file handle associated with the \fInumeric\fR file descriptor \fIfd\fR or undef on error. \fImode\fR is one of the values \f(CW"r"\fR, \f(CW"w"\fR, \f(CW"a"\fR with an optional \f(CW"+"\fR and/or \f(CW"b"\fR. .Sp The file descriptor is not dup'ed and will be closed when the handle is closed. .Sp It's similar to \f(CWIO::Handle::new_from_fd()\fR with the following improvements: .RS 4 .IP \(bu 4 It \fIreally\fR calls \f(CWfdopen(3)\fR. .IP \(bu 4 It expects POSIX mode strings (e.g. \f(CW"r"\fR, not \f(CW"<"\fR). .IP \(bu 4 It fails if \fImode\fR is not compatible with the flags of \fIfd\fR. .RE .RS 4 .Sp Usage example: .Sp .Vb 5 \& my $fh = do { \& opendir my $dh, \*(Aq.\*(Aq; \& fdopen(POSIX::dup(fileno $dh), \*(Aqr\*(Aq); \& }; \& chmod 0700, $fh; # this would fail with $dh from opendir .Ve .Sp \&\fINew in version 0.05.\fR .Sp \&\fIChanged in version 0.22:\fR \fIfd\fR can no longer be a handle (that was a wrong turn). .RE .ie n .IP """fdopendir""" 4 .el .IP \f(CWfdopendir\fR 4 .IX Item "fdopendir" ret = fdopendir(fd); .Sp Returns a directory handle associated with the numeric file descriptor \fIfd\fR or undef on error. .Sp The file descriptor is not dup'ed and will be closed when the handle is closed. .Sp Usage example: .Sp .Vb 5 \& my $dh = do { \& sysopen my $fh, \*(Aq/tmp\*(Aq, O_RDONLY|O_DIRECTORY|O_NOFOLLOW; \& fdopendir(POSIX::dup(fileno $fh)); \& }; \& my @dents = readdir $dh; # this would fail with $fh from sysopen .Ve .Sp \&\fINew in version 0.05.\fR .Sp \&\fIChanged in version 0.22:\fR \fIfd\fR can no longer be a handle (that was a wrong turn). .ie n .IP """fdim""" 4 .el .IP \f(CWfdim\fR 4 .IX Item "fdim" d = fdim(double x, double y); .ie n .IP """feclearexcept""" 4 .el .IP \f(CWfeclearexcept\fR 4 .IX Item "feclearexcept" ret = feclearexcept(excepts); .Sp Returns \f(CW\*(C`0 but true\*(C'\fR on success, undef on error. .Sp \&\fINew in version 0.20.\fR .ie n .IP """fegetround""" 4 .el .IP \f(CWfegetround\fR 4 .IX Item "fegetround" rounding_mode = \fBfegetround()\fR; .ie n .IP """feraiseexcept""" 4 .el .IP \f(CWferaiseexcept\fR 4 .IX Item "feraiseexcept" ret = feraiseexcept(excepts); .Sp Returns \f(CW\*(C`0 but true\*(C'\fR on success, undef on error. .Sp \&\fINew in version 0.20.\fR .ie n .IP """fesetround""" 4 .el .IP \f(CWfesetround\fR 4 .IX Item "fesetround" ret = fesetround(round); .Sp Returns \f(CW\*(C`0 but true\*(C'\fR on success, undef on error. .ie n .IP """fetestexcept""" 4 .el .IP \f(CWfetestexcept\fR 4 .IX Item "fetestexcept" excepts_currently_set = fetestexcept(excepts); .Sp \&\fINew in version 0.20.\fR .ie n .IP """fexecve""" 4 .el .IP \f(CWfexecve\fR 4 .IX Item "fexecve" fexecve(fd, args, env=undef); .Sp Executes the program referred to by the file descriptor \fIfd\fR, passing \fIargs\fR as its command-line arguments and optionally \fIenv\fR as its environment. .Sp \&\fIargs\fR must be an array reference and, by convention, \fIargs\->[0]\fR should be the name of the program being executed. .Sp \&\fIenv\fR must be a hash reference. If omitted or undef, the environment of the calling proces is used (which you can manipulate via \f(CW%ENV\fR). .Sp See the manpage for issues regarding the close-on-exec flag and the /proc filesystem. .Sp Returns undef on error, otherwise it doesn't return. .Sp Usage example: .Sp .Vb 2 \& sysopen my $fh, \*(Aq/usr/bin/date\*(Aq, O_PATH; \& fexecve($fh, [qw(date +%T)], {TZ => \*(AqUTC\*(Aq}); .Ve .Sp See also \f(CWexecveat()\fR. .Sp \&\fINew in version 0.22.\fR .ie n .IP """ffs""" 4 .el .IP \f(CWffs\fR 4 .IX Item "ffs" pos = ffs(i); .Sp Calls \f(CWffsll()\fR, \f(CWffsl()\fR, or \f(CWffs()\fR, whichever is the maximum available on your system. .ie n .IP """floor""" 4 .el .IP \f(CWfloor\fR 4 .IX Item "floor" y = floor(x); .ie n .IP """fma""" 4 .el .IP \f(CWfma\fR 4 .IX Item "fma" r = fma(x, y, z); .ie n .IP """fmax""" 4 .el .IP \f(CWfmax\fR 4 .IX Item "fmax" m = fmax(x, y); .ie n .IP """fmin""" 4 .el .IP \f(CWfmin\fR 4 .IX Item "fmin" m = fmin(x, y); .ie n .IP """fmod""" 4 .el .IP \f(CWfmod\fR 4 .IX Item "fmod" m = fmod(x, y); .ie n .IP """fnmatch""" 4 .el .IP \f(CWfnmatch\fR 4 .IX Item "fnmatch" ret = fnmatch(pattern, string, flags); .Sp Returns 0 if \fIstring\fR matches \fIpattern\fR, \f(CW\*(C`FNM_NOMATCH\*(C'\fR if there is no match, undef if there is an error. .Sp \&\fIflags\fR is the bitwise OR of zero or more of \f(CW\*(C`FNM_NOESCAPE\*(C'\fR, \&\f(CW\*(C`FNM_PATHNAME\*(C'\fR, \f(CW\*(C`FNM_PERIOD\*(C'\fR, \f(CW\*(C`FNM_FILE_NAME\*(C'\fR, \f(CW\*(C`FNM_LEADING_DIR\*(C'\fR, \&\f(CW\*(C`FNM_CASEFOLD\*(C'\fR. .ie n .IP """fpclassify""" 4 .el .IP \f(CWfpclassify\fR 4 .IX Item "fpclassify" fpclassify(x); .Sp Returns one of \f(CW\*(C`FP_NAN\*(C'\fR, \f(CW\*(C`FP_INFINITE\*(C'\fR, \f(CW\*(C`FP_ZERO\*(C'\fR, \f(CW\*(C`FP_SUBNORMAL\*(C'\fR, \&\f(CW\*(C`FP_NORMAL\*(C'\fR. .ie n .IP """fstatat""" 4 .el .IP \f(CWfstatat\fR 4 .IX Item "fstatat" (dev, ino, mode, nlink, uid, gid, rdev, size, atim_sec, mtim_sec, ctim_sec, blksize, blocks, atim_nsec, mtim_nsec, ctim_nsec) = fstatat(dirfd, path, flags = 0); .Sp \&\fIflags\fR is the bitwise OR of zero or more of \f(CW\*(C`AT_SYMLINK_NOFOLLOW\*(C'\fR, \&\f(CW\*(C`AT_NO_AUTOMOUNT\*(C'\fR. Your system might support a different set of flags. .Sp See \f(CWstat()\fR for notes on the return values and bugs in \&\f(CWCORE::stat()\fR. .Sp Returns the empty list on error. .ie n .IP """fsync""" 4 .el .IP \f(CWfsync\fR 4 .IX Item "fsync" ret = fsync(fd); .ie n .IP """futimens""" 4 .el .IP \f(CWfutimens\fR 4 .IX Item "futimens" ret = futimens(fd, atime_sec, atime_nsec, mtime_sec, mtime_nsec); .Sp atime_sec and mtime_sec default to 0, atime_nsec and mtime_nsec default to \&\f(CW\*(C`UTIME_NOW\*(C'\fR. .ie n .IP """getdate""" 4 .el .IP \f(CWgetdate\fR 4 .IX Item "getdate" (sec, min, hour, mday, mon, year, wday, yday, isdst) = getdate(string); .ie n .IP """getdate_err""" 4 .el .IP \f(CWgetdate_err\fR 4 .IX Item "getdate_err" \&\fBgetdate_err()\fR returns the value of the getdate_err variable. .ie n .IP """getegid""" 4 .el .IP \f(CWgetegid\fR 4 .IX Item "getegid" egid = \fBgetegid()\fR; .ie n .IP """geteuid""" 4 .el .IP \f(CWgeteuid\fR 4 .IX Item "geteuid" euid = \fBgeteuid()\fR; .ie n .IP """getgid""" 4 .el .IP \f(CWgetgid\fR 4 .IX Item "getgid" gid = \fBgetgid()\fR; .ie n .IP """gethostid""" 4 .el .IP \f(CWgethostid\fR 4 .IX Item "gethostid" hostid = \fBgethostid()\fR; .ie n .IP """gethostname""" 4 .el .IP \f(CWgethostname\fR 4 .IX Item "gethostname" hostname = \fBgethostname()\fR; .ie n .IP """getitimer""" 4 .el .IP \f(CWgetitimer\fR 4 .IX Item "getitimer" (int_sec, int_usec, val_sec, val_usec) = getitimer(which); .Sp \&\fIwhich\fR is one of \f(CW\*(C`ITIMER_REAL\*(C'\fR, \f(CW\*(C`ITIMER_VIRTUAL\*(C'\fR, \f(CW\*(C`ITIMER_PROF\*(C'\fR. .ie n .IP """getpriority""" 4 .el .IP \f(CWgetpriority\fR 4 .IX Item "getpriority" prio = getpriority(which=PRIO_PROCESS, who=0); .Sp \&\fIwhich\fR can be one of \f(CW\*(C`PRIO_PROCESS\*(C'\fR, \f(CW\*(C`PRIO_PGRP\*(C'\fR, \f(CW\*(C`PRIO_USER\*(C'\fR, defaults to \f(CW\*(C`PRIO_PROCESS\*(C'\fR. \fIwho\fR defaults to 0. .Sp Returns undef on error. .ie n .IP """getsid""" 4 .el .IP \f(CWgetsid\fR 4 .IX Item "getsid" sid = getsid(pid); .Sp \&\fIpid\fR defaults to 0. .ie n .IP """getuid""" 4 .el .IP \f(CWgetuid\fR 4 .IX Item "getuid" uid = \fBgetuid()\fR; .ie n .IP """getutxent""" 4 .el .IP \f(CWgetutxent\fR 4 .IX Item "getutxent" (user, id, line, pid, type, sec, usec) = \fBgetutxent()\fR; .Sp \&\fBgetutxent()\fR reads a line from the current file position in the utmp file. .ie n .IP """getutxid""" 4 .el .IP \f(CWgetutxid\fR 4 .IX Item "getutxid" (user, id, line, pid, type, sec, usec) = getutxid(ut_type, ut_id); .Sp \&\fBgetutxid()\fR searches forward from the current file position in the utmp file based upon \fIut_type\fR and \fIut_id\fR. If \fIut_type\fR is one of \f(CW\*(C`RUN_LVL\*(C'\fR, \&\f(CW\*(C`BOOT_TIME\*(C'\fR, \f(CW\*(C`NEW_TIME\*(C'\fR, or \f(CW\*(C`OLD_TIME\*(C'\fR, \fBgetutxid()\fR will find the first entry whose \fIut_type\fR field matches \fIut_type\fR. If \fIut_type\fR is one of \&\f(CW\*(C`INIT_PROCESS\*(C'\fR, \f(CW\*(C`LOGIN_PROCESS\*(C'\fR, \f(CW\*(C`USER_PROCESS\*(C'\fR, or \f(CW\*(C`DEAD_PROCESS\*(C'\fR, \&\fBgetutxid()\fR will find the first entry whose \fIut_id\fR field matches \fIut_id\fR. .ie n .IP """getutxline""" 4 .el .IP \f(CWgetutxline\fR 4 .IX Item "getutxline" (user, id, line, pid, type, sec, usec) = getutxline(ut_line); .Sp \&\fBgetutxline()\fR searches forward from the current file position in the utmp file. It scans entries whose \fIut_type\fR is \f(CW\*(C`USER_PROCESS\*(C'\fR or \f(CW\*(C`LOGIN_PROCESS\*(C'\fR and returns the first one whose \fIut_line\fR field matches \fIut_line\fR. .ie n .IP """hypot""" 4 .el .IP \f(CWhypot\fR 4 .IX Item "hypot" r = hypot(x, y); .ie n .IP """ilogb""" 4 .el .IP \f(CWilogb\fR 4 .IX Item "ilogb" y = ilogb(x); .ie n .IP """isalnum""" 4 .el .IP \f(CWisalnum\fR 4 .IX Item "isalnum" ret = isalnum(charstring); .Sp Like \fBPOSIX::isalnum()\fR but returns 0 for the empty string. .ie n .IP """isalpha""" 4 .el .IP \f(CWisalpha\fR 4 .IX Item "isalpha" ret = isalpha(charstring); .Sp Like \fBPOSIX::isalpha()\fR but returns 0 for the empty string. .ie n .IP """isascii""" 4 .el .IP \f(CWisascii\fR 4 .IX Item "isascii" ret = isascii(charstring); .Sp POSIX.1\-2008 marks it as obsolete, but I include it anyway. .Sp \&\fINew in version 0.19.\fR .ie n .IP """isatty""" 4 .el .IP \f(CWisatty\fR 4 .IX Item "isatty" ret = isatty(fd); .ie n .IP """isblank""" 4 .el .IP \f(CWisblank\fR 4 .IX Item "isblank" ret = isblank(charstring); .Sp Like \fBPOSIX::isblank()\fR but returns 0 for the empty string. .ie n .IP """iscntrl""" 4 .el .IP \f(CWiscntrl\fR 4 .IX Item "iscntrl" ret = iscntrl(charstring); .Sp Like \fBPOSIX::iscntrl()\fR but returns 0 for the empty string. .ie n .IP """isdigit""" 4 .el .IP \f(CWisdigit\fR 4 .IX Item "isdigit" ret = isdigit(charstring); .Sp Like \fBPOSIX::isdigit()\fR but returns 0 for the empty string. .ie n .IP """isfinite""" 4 .el .IP \f(CWisfinite\fR 4 .IX Item "isfinite" ret = isfinite(x); .ie n .IP """isgraph""" 4 .el .IP \f(CWisgraph\fR 4 .IX Item "isgraph" ret = isgraph(charstring); .Sp Like \fBPOSIX::isgraph()\fR but returns 0 for the empty string. .ie n .IP """isgreaterequal""" 4 .el .IP \f(CWisgreaterequal\fR 4 .IX Item "isgreaterequal" ret = isgreaterequal(x, y); .Sp \&\fINew in version 0.20.\fR .ie n .IP """isinf""" 4 .el .IP \f(CWisinf\fR 4 .IX Item "isinf" ret = isinf(x); .ie n .IP """isless""" 4 .el .IP \f(CWisless\fR 4 .IX Item "isless" ret = isless(x, y); .Sp \&\fINew in version 0.20.\fR .ie n .IP """islessequal""" 4 .el .IP \f(CWislessequal\fR 4 .IX Item "islessequal" ret = islessequal(x, y); .Sp \&\fINew in version 0.20.\fR .ie n .IP """islessgreater""" 4 .el .IP \f(CWislessgreater\fR 4 .IX Item "islessgreater" ret = islessgreater(x, y); .Sp \&\fINew in version 0.20.\fR .ie n .IP """islower""" 4 .el .IP \f(CWislower\fR 4 .IX Item "islower" ret = islower(charstring); .Sp Like \fBPOSIX::islower()\fR but returns 0 for the empty string. .ie n .IP """isnan""" 4 .el .IP \f(CWisnan\fR 4 .IX Item "isnan" ret = isnan(x); .ie n .IP """isnormal""" 4 .el .IP \f(CWisnormal\fR 4 .IX Item "isnormal" ret = isnormal(x); .ie n .IP """isprint""" 4 .el .IP \f(CWisprint\fR 4 .IX Item "isprint" ret = isprint(charstring); .Sp Like \fBPOSIX::isprint()\fR but returns 0 for the empty string. .ie n .IP """ispunct""" 4 .el .IP \f(CWispunct\fR 4 .IX Item "ispunct" ret = ispunct(charstring); .Sp Like \fBPOSIX::ispunct()\fR but returns 0 for the empty string. .ie n .IP """isspace""" 4 .el .IP \f(CWisspace\fR 4 .IX Item "isspace" ret = isspace(charstring); .Sp Like \fBPOSIX::isspace()\fR but returns 0 for the empty string. .ie n .IP """isunordered""" 4 .el .IP \f(CWisunordered\fR 4 .IX Item "isunordered" ret = isunordered(x, y); .Sp \&\fINew in version 0.20.\fR .ie n .IP """isupper""" 4 .el .IP \f(CWisupper\fR 4 .IX Item "isupper" ret = isupper(charstring); .Sp Like \fBPOSIX::isupper()\fR but returns 0 for the empty string. .ie n .IP """isxdigit""" 4 .el .IP \f(CWisxdigit\fR 4 .IX Item "isxdigit" ret = isxdigit(charstring); .Sp Like \fBPOSIX::isxdigit()\fR but returns 0 for the empty string. .ie n .IP """j0""" 4 .el .IP \f(CWj0\fR 4 .IX Item "j0" y = j0(x); .Sp \&\f(CWj0()\fR is the Bessel function of the first kind of order 0. .ie n .IP """j1""" 4 .el .IP \f(CWj1\fR 4 .IX Item "j1" y = j1(x); .Sp \&\f(CWj1()\fR is the Bessel function of the first kind of order 1. .ie n .IP """jn""" 4 .el .IP \f(CWjn\fR 4 .IX Item "jn" y = jn(n, x); .Sp \&\f(CWjn()\fR is the Bessel function of the first kind of order \fIn\fR. .ie n .IP """jrand48""" 4 .el .IP \f(CWjrand48\fR 4 .IX Item "jrand48" (r, X0, X1, X2) = jrand48(X0, X1, X2); .ie n .IP """killpg""" 4 .el .IP \f(CWkillpg\fR 4 .IX Item "killpg" ret = killpg(pgrp, sig); .ie n .IP """l64a""" 4 .el .IP \f(CWl64a\fR 4 .IX Item "l64a" s = l64a(n); .ie n .IP """lchown""" 4 .el .IP \f(CWlchown\fR 4 .IX Item "lchown" ret = lchown(path, uid, gid); .Sp \&\fINew in version 0.08.\fR .ie n .IP """ldexp""" 4 .el .IP \f(CWldexp\fR 4 .IX Item "ldexp" y = ldexp(x, exp); .ie n .IP """lgamma""" 4 .el .IP \f(CWlgamma\fR 4 .IX Item "lgamma" y = lgamma(x); .ie n .IP """link""" 4 .el .IP \f(CWlink\fR 4 .IX Item "link" ret = link(path1, path2); .ie n .IP """linkat""" 4 .el .IP \f(CWlinkat\fR 4 .IX Item "linkat" ret = linkat(fd1, path1, fd2, path2, flags=0); .Sp \&\fIflags\fR can be 0 or \f(CW\*(C`AT_SYMLINK_FOLLOW\*(C'\fR. Your system might support a different set of flags. .ie n .IP """log""" 4 .el .IP \f(CWlog\fR 4 .IX Item "log" y = log(x); .ie n .IP """log10""" 4 .el .IP \f(CWlog10\fR 4 .IX Item "log10" y = log10(x); .ie n .IP """log1p""" 4 .el .IP \f(CWlog1p\fR 4 .IX Item "log1p" y = log1p(x); .ie n .IP """log2""" 4 .el .IP \f(CWlog2\fR 4 .IX Item "log2" y = log2(x); .ie n .IP """logb""" 4 .el .IP \f(CWlogb\fR 4 .IX Item "logb" y = logb(x); .ie n .IP """lrand48""" 4 .el .IP \f(CWlrand48\fR 4 .IX Item "lrand48" r = \fBlrand48()\fR; .ie n .IP """lround""" 4 .el .IP \f(CWlround\fR 4 .IX Item "lround" l = lround(x); .Sp Calls \f(CWllround()\fR or \f(CWlround()\fR whichever is the maximum available on your system. If the rounded value is outside Perl's internal signed integer range, it is returned as a string. If the rounded value is too large to be stored in a long long or long, undef is returned. .ie n .IP """lstat""" 4 .el .IP \f(CWlstat\fR 4 .IX Item "lstat" (dev, ino, mode, nlink, uid, gid, rdev, size, atim_sec, mtim_sec, ctim_sec, blksize, blocks, atim_nsec, mtim_nsec, ctim_nsec) = lstat(path); .Sp \&\f(CW\*(C`path\*(C'\fR is assumed to be a string (or will be converted to a string). .Sp See \f(CWstat()\fR for notes on the return values and bugs in \&\f(CWCORE::stat()\fR. .Sp Returns the empty list on error. .ie n .IP """mkdir""" 4 .el .IP \f(CWmkdir\fR 4 .IX Item "mkdir" ret = mkdir(path, [mode = 0777]); .ie n .IP """mkdirat""" 4 .el .IP \f(CWmkdirat\fR 4 .IX Item "mkdirat" ret = mkdirat(fd, path, mode); .ie n .IP """mkdtemp""" 4 .el .IP \f(CWmkdtemp\fR 4 .IX Item "mkdtemp" name = mkdtemp(template); .ie n .IP """mkfifo""" 4 .el .IP \f(CWmkfifo\fR 4 .IX Item "mkfifo" ret = mkfifo(path, mode); .ie n .IP """mkfifoat""" 4 .el .IP \f(CWmkfifoat\fR 4 .IX Item "mkfifoat" ret = mkfifoat(fd, path, mode); .ie n .IP """mknod""" 4 .el .IP \f(CWmknod\fR 4 .IX Item "mknod" ret = mknod(path, mode, dev); .ie n .IP """mknodat""" 4 .el .IP \f(CWmknodat\fR 4 .IX Item "mknodat" ret = mknodat(fd, path, mode, dev); .ie n .IP """mkstemp""" 4 .el .IP \f(CWmkstemp\fR 4 .IX Item "mkstemp" (fd, name) = mkstemp(template); .ie n .IP """mrand48""" 4 .el .IP \f(CWmrand48\fR 4 .IX Item "mrand48" \&\fBmrand48()\fR; .ie n .IP """nanosleep""" 4 .el .IP \f(CWnanosleep\fR 4 .IX Item "nanosleep" (rem_sec, rem_nsec) = nanosleep(sec, nsec); .Sp In scalar context returns the remaining seconds as a floating point number. .ie n .IP """nearbyint""" 4 .el .IP \f(CWnearbyint\fR 4 .IX Item "nearbyint" y = nearbyint(x); .ie n .IP """nextafter""" 4 .el .IP \f(CWnextafter\fR 4 .IX Item "nextafter" z = nextafter(x, y); .ie n .IP """nexttoward""" 4 .el .IP \f(CWnexttoward\fR 4 .IX Item "nexttoward" z = nexttoward(x, y); .ie n .IP """nice""" 4 .el .IP \f(CWnice\fR 4 .IX Item "nice" ret = nice(incr); .Sp Returns undef on error. .ie n .IP """nrand48""" 4 .el .IP \f(CWnrand48\fR 4 .IX Item "nrand48" r = \fBnrand48()\fR .ie n .IP """open""" 4 .el .IP \f(CWopen\fR 4 .IX Item "open" ret = open(path, flags=O_RDONLY, mode=0666); .ie n .IP """openat""" 4 .el .IP \f(CWopenat\fR 4 .IX Item "openat" ret = openat(dirfd, path, flags=O_RDONLY, mode=0666); .Sp If \fIdirfd\fR is numeric (i.e. a file descriptor), \f(CWopenat()\fR returns a file descriptor. If \fIdirfd\fR is a file or directory handle, the return value is also a handle whose type depends on the file type of \fIpath\fR: If \fIpath\fR is a directory, the return value is a directory handle, otherwise it's a file handle. .Sp To get a handle even for the special numeric \fIdirfd\fR value \f(CW\*(C`AT_FDCWD\*(C'\fR, you can pass a reference to that value instead, i.e. \f(CW\*(C`openat(\eAT_FDCWD, ...)\*(C'\fR. .Sp Returns undef on error. .Sp \&\fIChanged in version 0.18:\fR Support added for \f(CW\*(C`\eAT_FDCWD\*(C'\fR reference. .ie n .IP """openat2""" 4 .el .IP \f(CWopenat2\fR 4 .IX Item "openat2" ret = openat2(dirfd, path, how); .Sp The \f(CWopenat2()\fR system call is a Linux-specific extension of \&\f(CWopenat()\fR and provides a superset of its functionality. .Sp The \fIhow\fR parameter is a hash reference corresponding to the \fIstruct open_how\fR. It currently supports the keys \fIflags\fR, \fImode\fR and \&\fIresolve\fR. Missing keys are treated as having a zero value. .Sp Example: .Sp .Vb 4 \& my $fh = openat2( \& \eAT_FDCWD, \*(Aq/foobar\*(Aq, \& {flags => O_RDWR|O_CREAT, mode => 0600, resolve => RESOLVE_IN_ROOT} \& ); .Ve .Sp Note that, unlike \f(CWopen()\fR or \f(CWopenat()\fR, \f(CWopenat2()\fR is very picky about \fIflags\fR and \fImode\fR. See the manpage for details. .Sp Returns undef on error. .Sp \&\fINew in version 0.18.\fR .ie n .IP """pathconf""" 4 .el .IP \f(CWpathconf\fR 4 .IX Item "pathconf" ret = pathconf(what, name); .Sp \&\f(CW\*(C`what\*(C'\fR can be a path or, if your system supports \fBfpathconf()\fR, a Perl file or directory handle or a file descriptor. .Sp \&\fIname\fR is one of the \f(CW\*(C`_PC_*\*(C'\fR integer constants. .Sp Returns undef on error. .Sp \&\fINew in version 0.22.\fR .ie n .IP """posix_fadvise""" 4 .el .IP \f(CWposix_fadvise\fR 4 .IX Item "posix_fadvise" ret = posix_fadvise(fd, offset, len, advice); .Sp \&\fIadvice\fR is one of the \f(CW\*(C`POSIX_FADV_\*(C'\fR constants. .Sp \&\fINew in version 0.14.\fR .ie n .IP """posix_fallocate""" 4 .el .IP \f(CWposix_fallocate\fR 4 .IX Item "posix_fallocate" ret = posix_fallocate(fd, offset, len); .Sp \&\fINew in version 0.14.\fR .ie n .IP """pread""" 4 .el .IP \f(CWpread\fR 4 .IX Item "pread" bytes_read = pread(fd, buf, count, offset=0, buf_offset=0); .Sp \&\f(CWpread()\fR reads \fIcount\fR bytes (not characters) of data from the file descriptor \fIfd\fR at file offset \fIoffset\fR into the scalar \fIbuf\fR without changing the file offset. \fIbuf\fR will be enlarged automatically if necessary. .Sp \&\fIoffset\fR and \fIbuf_offset\fR are set to 0 if omitted or undef. .Sp \&\f(CWpread()\fR treats \fIbuf\fR just like \f(CWsysread()\fR does: \fIbuf_offset\fR may be specified to place the read data at that position in \fIbuf\fR. If \fIbuf_offset\fR is past the end of \fIbuf\fR, \fIbuf\fR will be padded with zeros before appending the data. If \fIbuf_offset\fR is negative, it is counted from the end of the string. \fIbuf\fR will be grown or shrunk so that the last byte actually read is the last byte of \fIbuf\fR after the read. .Sp Returns the number of bytes read, 0 at EOF, undef on error. .Sp Croaks if \fIbuf\fR is read-only and \fIcount\fR is non-zero. .Sp \&\fIChanged in version 0.13:\fR Argument order is now (count, offset) instead of (offset, count). .Sp \&\fIChanged in version 0.22:\fR Croak with read-only \fIbuf\fR and non-zero \fIcount\fR. .ie n .IP """preadv""" 4 .el .IP \f(CWpreadv\fR 4 .IX Item "preadv" bytes_read = preadv(fd, buffers, sizes, offset=0); .Sp \&\f(CWpreadv()\fR behaves like \f(CWreadv()\fR but adds an optional \fIoffset\fR argument, which specifies the file position at which the data is to be read. \fIoffset\fR is set to 0 if omitted or undef. .Sp The file offset is not changed by this system call. The file referred to by \&\fIfd\fR must be capable of seeking. .Sp This syscall is present in Linux and BSD. .Sp \&\fINew in version 0.13.\fR .ie n .IP """preadv2""" 4 .el .IP \f(CWpreadv2\fR 4 .IX Item "preadv2" bytes_read = preadv2(fd, buffers, sizes, offset=0, flags=0); .Sp \&\f(CWpreadv2()\fR is similar to \f(CWpreadv()\fR but adds an optional \fIflags\fR argument, which is a bitwise OR of zero or more of the \f(CW\*(C`RWF_*\*(C'\fR flags (see the manpage for details). \fIflags\fR is set to 0 if omitted or undef. .Sp This syscall is Linux-specific. .Sp \&\fINew in version 0.20.\fR .ie n .IP """ptsname""" 4 .el .IP \f(CWptsname\fR 4 .IX Item "ptsname" name = ptsname(fd); .Sp \&\fIChanged in version 0.19:\fR Calls \f(CWptsname_r()\fR if available. .Sp \&\fIChanged in version 0.22:\fR \fIfd\fR may also be a file handle. .ie n .IP """pwrite""" 4 .el .IP \f(CWpwrite\fR 4 .IX Item "pwrite" bytes_written = pwrite(fd, buf, count=undef, offset=0, buf_offset=0); .Sp \&\f(CWpwrite()\fR writes \fIcount\fR bytes of data from the scalar \fIbuf\fR to the file descriptor \fIfd\fR at file offset \fIoffset\fR without changing the file offset. The file referenced by \fIfd\fR must be capable of seeking. .Sp If \fIcount\fR is omitted or undef, everything from \fIbuf_offset\fR up to the end of \fIbuf\fR is written. .Sp \&\fIbuf_offset\fR may be specified to write data from that position in \&\fIbuf\fR. If \fIbuf_offset\fR is negative it is counted from the end of the string. .Sp \&\fIoffset\fR and \fIbuf_offset\fR are set to 0 if omitted or undef. .Sp Returns the number of bytes written, undef on error. .Sp On Linux, if a file is opened with \f(CW\*(C`O_APPEND\*(C'\fR, \f(CWpwrite()\fR appends data to the end of the file, regardless of the value of \fIoffset\fR (in violation of POSIX). .Sp \&\fIChanged in version 0.13:\fR Argument order is now (count, offset) instead of (offset, count). .ie n .IP """pwritev""" 4 .el .IP \f(CWpwritev\fR 4 .IX Item "pwritev" bytes_written = pwritev(fd, buffers, offset=0); .Sp \&\f(CWpwritev()\fR behaves like \f(CWwritev()\fR but adds an optional \&\fIoffset\fR argument, which specifies the file position at which the data is to be written. \fIoffset\fR is set to 0 if omitted or undef. .Sp The file offset is not changed by this system call. The file referred to by \&\fIfd\fR must be capable of seeking. .Sp On Linux, if a file is opened with \f(CW\*(C`O_APPEND\*(C'\fR, \f(CWpwritev()\fR appends data to the end of the file, regardless of the value of \fIoffset\fR (in violation of POSIX). .Sp This syscall is present in Linux and BSD. .Sp \&\fINew in version 0.08.\fR .ie n .IP """pwritev2""" 4 .el .IP \f(CWpwritev2\fR 4 .IX Item "pwritev2" bytes_written = pwritev2(fd, buffers, offset=0, flags=0); .Sp \&\f(CWpwritev2()\fR is similar to \f(CWpwritev()\fR but adds an optional \&\fIflags\fR argument, which is a bitwise OR of zero or more of the \f(CW\*(C`RWF_*\*(C'\fR flags (see the manpage for details). \fIflags\fR is set to 0 if omitted or undef. .Sp This syscall is Linux-specific. .Sp \&\fINew in version 0.20.\fR .ie n .IP """random""" 4 .el .IP \f(CWrandom\fR 4 .IX Item "random" r = \fBrandom()\fR; .ie n .IP """raise""" 4 .el .IP \f(CWraise\fR 4 .IX Item "raise" ret = raise(sig); .ie n .IP """read""" 4 .el .IP \f(CWread\fR 4 .IX Item "read" bytes_read = read(fd, buf, count); .Sp Like \f(CWPOSIX::read()\fR but returns 0 at EOF instead of \fI"0 but true"\fR. Croaks if \fIbuf\fR is read-only and \fIcount\fR is non-zero. .Sp \&\fIChanged in version 0.22:\fR Croak with read-only \fIbuf\fR and non-zero \fIcount\fR. .ie n .IP """readv""" 4 .el .IP \f(CWreadv\fR 4 .IX Item "readv" bytes_read = readv(fd, buffers, sizes); .Sp \&\f(CWreadv()\fR reads from the file descriptor \fIfd\fR into \fIbuffers\fR as many strings as there are elements in \fIsizes\fR. .Sp \&\fIbuffers\fR must be a \fIvariable\fR holding an array (\f(CW@buf\fR), an array reference or undef (\f(CW$buf\fR). If it is undef it will be upgraded to an array reference. .Sp \&\fIsizes\fR must be an array reference, i.e. \f(CW\*(C`\e@sizes\*(C'\fR, \f(CW$sizes\fR, or \f(CW\*(C`[...]\*(C'\fR. .Sp \&\fIsizes\fR is expected to hold unsigned integers that specify how many bytes are to be read into each buffer. A byte count of 0 or undef creates an empty string. \fIsizes\fR is processed in array order. .Sp \&\fIbuffers\fR will be extended if necessary, but it will never be shrunk. If \&\fIbuffers\fR is not empty, any existing elements are replaced as long as sufficient data was read from \fIfd\fR. .Sp \&\f(CWreadv()\fR returns the number of bytes read, undef on error. .Sp Note that it is not an error for a successful call to transfer fewer bytes than requested. In this case there may be one "partially" filled buffer, i.e. it contains fewer bytes than the corresponding size. Surplus size entries lead to corresponding empty buffers. .Sp Usage example: .Sp .Vb 5 \& my $fh = openat(\eAT_FDCWD, \*(Aq/tmp/foobar\*(Aq, O_RDWR|O_CREAT|O_TRUNC); \& pwrite($fh, \*(Aqfoobar\*(Aq, 6, 0); \& readv($fh, my $buf1, [3, 0, 8]); # $buf1: [\*(Aqfoo\*(Aq, \*(Aq\*(Aq, \*(Aqbar\*(Aq] \& sysseek $fh, 0, 0; \& readv($fh, my @buf2, [1, 3, 2]); # @buf2: (\*(Aqf\*(Aq, \*(Aqoob\*(Aq, \*(Aqar\*(Aq) .Ve .Sp \&\fINew in version 0.13.\fR .Sp \&\fIChanged in version 0.22:\fR \fIbuffers\fR may be an undef variable, buffers beyond EOF are created as empty strings instead of being skipped. .ie n .IP """readlink""" 4 .el .IP \f(CWreadlink\fR 4 .IX Item "readlink" name = readlink(path); .Sp Returns undef on error. .ie n .IP """readlinkat""" 4 .el .IP \f(CWreadlinkat\fR 4 .IX Item "readlinkat" name = readlinkat(dirfd, path); .Sp Returns undef on error. .ie n .IP """realpath""" 4 .el .IP \f(CWrealpath\fR 4 .IX Item "realpath" resolved_path = realpath(path); .Sp Calls the actual C library fuction \f(CWrealpath()\fR and relies on it to be able to allocate memory for the resolved path automatically (as required by POSIX\-2008). .Sp Returns undef on error. .Sp \&\fINew in version 0.18.\fR .ie n .IP """remainder""" 4 .el .IP \f(CWremainder\fR 4 .IX Item "remainder" rem = remainder(x, y); .Sp Returns undef on error. .ie n .IP """remove""" 4 .el .IP \f(CWremove\fR 4 .IX Item "remove" ret = remove(path); .Sp Calls the actual C library function \f(CWremove()\fR. .Sp Note that core \f(CWPOSIX::remove()\fR fails if \fIpath\fR is a symlink to a directory because someone "couldn't read the plans right and did a piss-poor job of putting it together" as \f(CW(\-d $_[0]) ? CORE::rmdir($_[0]) : CORE::unlink($_[0])\fR. Quote from Armageddon. .Sp This could be fixed like this: \f(CW\*(C`unlink $_[0] or ($!{EISDIR} or $!{EPERM}) and rmdir $_[0]\*(C'\fR (correct errno check depends on OS), or by using the library call right away. .ie n .IP """removeat""" 4 .el .IP \f(CWremoveat\fR 4 .IX Item "removeat" ret = removeat(dirfd, path); .Sp The \f(CWremoveat()\fR function works exactly like \f(CWremove()\fR but \&\fIpath\fR is interpreted relative to \fIdirfd\fR as with the other \fI*at\fR functions. .Sp This function is a home-grown non-standard extension only available in this module (to my knowledge). .Sp \&\fINew in version 0.22.\fR .ie n .IP """remquo""" 4 .el .IP \f(CWremquo\fR 4 .IX Item "remquo" (rem, quo) = remquo(x, y); .Sp Returns the empty list on error. .Sp \&\fINew in version 0.20.\fR .ie n .IP """rename""" 4 .el .IP \f(CWrename\fR 4 .IX Item "rename" ret = rename(old, new); .ie n .IP """renameat""" 4 .el .IP \f(CWrenameat\fR 4 .IX Item "renameat" ret = renameat(olddirfd, oldpath, newdirfd, newpath); .ie n .IP """renameat2""" 4 .el .IP \f(CWrenameat2\fR 4 .IX Item "renameat2" ret = renameat(olddirfd, oldpath, newdirfd, newpath, flags=0); .Sp The \f(CWrenameat2()\fR system call is a Linux-specific extension of \&\f(CWrenameat()\fR and provides a superset of its functionality. .Sp \&\fIflags\fR is the bitwise OR of zero or more of \f(CW\*(C`RENAME_EXCHANGE\*(C'\fR, \&\f(CW\*(C`RENAME_NOREPLACE\*(C'\fR, \f(CW\*(C`RENAME_WHITEOUT\*(C'\fR. .Sp \&\fINew in version 0.21.\fR .ie n .IP """rmdir""" 4 .el .IP \f(CWrmdir\fR 4 .IX Item "rmdir" ret = rmdir(path); .Sp \&\fINew in version 0.19.\fR .ie n .IP """round""" 4 .el .IP \f(CWround\fR 4 .IX Item "round" r = round(x); .ie n .IP """scalbn""" 4 .el .IP \f(CWscalbn\fR 4 .IX Item "scalbn" y = scalbn(x, n); .Sp Calls \f(CWscalbln()\fR or \f(CWscalbn()\fR, whichever is the maximum supported by your system. .ie n .IP """seed48""" 4 .el .IP \f(CWseed48\fR 4 .IX Item "seed48" (old_seed1, old_seed2, old_seed3) = seed48(seed1, seed2, seed3); .ie n .IP """setegid""" 4 .el .IP \f(CWsetegid\fR 4 .IX Item "setegid" ret = setegid(gid); .ie n .IP """seteuid""" 4 .el .IP \f(CWseteuid\fR 4 .IX Item "seteuid" ret = seteuid(uid); .ie n .IP """setgid""" 4 .el .IP \f(CWsetgid\fR 4 .IX Item "setgid" ret = setgid(gid); .ie n .IP """setitimer""" 4 .el .IP \f(CWsetitimer\fR 4 .IX Item "setitimer" (old_int_sec, old_int_usec, old_val_sec, old_val_usec) = setitimer(which, int_sec, int_usec, val_sec, val_usec); .Sp \&\fIwhich\fR is one of \f(CW\*(C`ITIMER_REAL\*(C'\fR, \f(CW\*(C`ITIMER_VIRTUAL\*(C'\fR, \f(CW\*(C`ITIMER_PROF\*(C'\fR. .ie n .IP """setpriority""" 4 .el .IP \f(CWsetpriority\fR 4 .IX Item "setpriority" ret = setpriority(prio, which=PRIO_PROCESS, who=0); .Sp \&\fIwhich\fR can be one of \f(CW\*(C`PRIO_PROCESS\*(C'\fR, \f(CW\*(C`PRIO_PGRP\*(C'\fR, \f(CW\*(C`PRIO_USER\*(C'\fR, defaults to \f(CW\*(C`PRIO_PROCESS\*(C'\fR. \fIwho\fR defaults to 0. .Sp Note that due to the support of default values for \fIwhich\fR and \fIwho\fR, \&\fIprio\fR is the first call parameter, whereas in the actual syscall it is the last. .Sp Returns true on success, undef on error. .ie n .IP """setregid""" 4 .el .IP \f(CWsetregid\fR 4 .IX Item "setregid" ret = setregid(rgid, egid); .ie n .IP """setreuid""" 4 .el .IP \f(CWsetreuid\fR 4 .IX Item "setreuid" ret = setreuid(ruid, euid); .ie n .IP """setsid""" 4 .el .IP \f(CWsetsid\fR 4 .IX Item "setsid" sid = \fBsetsid()\fR; .Sp \&\fINew in version 0.19.\fR .ie n .IP """setuid""" 4 .el .IP \f(CWsetuid\fR 4 .IX Item "setuid" ret = setuid(uid); .ie n .IP """setutxent""" 4 .el .IP \f(CWsetutxent\fR 4 .IX Item "setutxent" \&\fBsetutxent()\fR; .ie n .IP """sighold""" 4 .el .IP \f(CWsighold\fR 4 .IX Item "sighold" ret = sighold(sig); .ie n .IP """sigignore""" 4 .el .IP \f(CWsigignore\fR 4 .IX Item "sigignore" ret = sigignore(sig); .ie n .IP """signbit""" 4 .el .IP \f(CWsignbit\fR 4 .IX Item "signbit" b = signbit(x); .ie n .IP """sigpause""" 4 .el .IP \f(CWsigpause\fR 4 .IX Item "sigpause" sigpause(sig); .ie n .IP """sigrelse""" 4 .el .IP \f(CWsigrelse\fR 4 .IX Item "sigrelse" ret = sigrelse(sig); .ie n .IP """sin""" 4 .el .IP \f(CWsin\fR 4 .IX Item "sin" y = sin(x); .Sp \&\fINew in version 0.19.\fR .ie n .IP """sinh""" 4 .el .IP \f(CWsinh\fR 4 .IX Item "sinh" y = sinh(x); .ie n .IP """srand48""" 4 .el .IP \f(CWsrand48\fR 4 .IX Item "srand48" srand48(seedval); .ie n .IP """srandom""" 4 .el .IP \f(CWsrandom\fR 4 .IX Item "srandom" srandom(seed); .ie n .IP """stat""" 4 .el .IP \f(CWstat\fR 4 .IX Item "stat" (dev, ino, mode, nlink, uid, gid, rdev, size, atim_sec, mtim_sec, ctim_sec, blksize, blocks, atim_nsec, mtim_nsec, ctim_nsec) = stat(what); .Sp \&\f(CW\*(C`what\*(C'\fR can be a path, a Perl file handle or a file descriptor. .Sp \&\f(CW\*(C`ctim_sec\*(C'\fR, \f(CW\*(C`blksize\*(C'\fR, \f(CW\*(C`blocks\*(C'\fR and nanoseconds may not be available on your system. Values outside Perl's internal integer range are returned as strings, i.e. if you need the exact values you should, for example, use \f(CW\*(C`eq\*(C'\fR instead of \f(CW\*(C`==\*(C'\fR for comparisons. .Sp Note that \f(CWCORE::stat()\fR lies to you in some cases: It returns \fIrdev\fR as a signed integer even if your OS's \f(CW\*(C`dev_t\*(C'\fR is unsigned. It returns \fIsize\fR as a floating point number if your OS's \f(CW\*(C`off_t\*(C'\fR is bigger than Perl's integer size. It returns the times as floating point numbers if your OS's \f(CW\*(C`time_t\*(C'\fR is unsigned. .Sp \&\f(CWPOSIX::2008::stat()\fR doesn't mimic these bugs and uses the correct data types for all values. .Sp Returns the empty list on error. .ie n .IP """strptime""" 4 .el .IP \f(CWstrptime\fR 4 .IX Item "strptime" (sec, min, hour, mday, mon, year, wday, yday, isdst) = strptime(s, format[, sec, min, hour, mday, mon, year, wday, yday, isdst]); .Sp \&\f(CWstrptime()\fR converts the string \fIs\fR into a broken-down time according to the format string \fIformat\fR. The time fields may optionally be initialized in whole or in part and will be returned as initialized if they are not affected by the format string. Unprocessed uninitialized or undef fields are returned as undef. .Sp Returns the empty list on error. .Sp In scalar context returns the index of the first byte in \fIs\fR that was not processed or the byte length of \fIs\fR if the whole string was consumed or undef on error. .Sp As \f(CWstrptime()\fR acts on null-terminated strings, strings containing NUL bytes will only be processed up to the first NUL byte. .Sp \&\fINew in version 0.02.\fR .ie n .IP """symlink""" 4 .el .IP \f(CWsymlink\fR 4 .IX Item "symlink" ret = symlink(target, linkpath); .ie n .IP """symlinkat""" 4 .el .IP \f(CWsymlinkat\fR 4 .IX Item "symlinkat" ret = symlinkat(target, dirfd, linkpath); .ie n .IP """sync""" 4 .el .IP \f(CWsync\fR 4 .IX Item "sync" \&\fBsync()\fR; .Sp This function doesn't return any value. .ie n .IP """sysconf""" 4 .el .IP \f(CWsysconf\fR 4 .IX Item "sysconf" ret = sysconf(name); .Sp \&\fIname\fR is one of the \f(CW\*(C`_SC_*\*(C'\fR integer constants. .Sp Returns undef on error. .Sp \&\fINew in version 0.22.\fR .ie n .IP """tan""" 4 .el .IP \f(CWtan\fR 4 .IX Item "tan" y = tan(x); .ie n .IP """tanh""" 4 .el .IP \f(CWtanh\fR 4 .IX Item "tanh" y = tanh(x); .ie n .IP """tgamma""" 4 .el .IP \f(CWtgamma\fR 4 .IX Item "tgamma" y = tgamma(x); .ie n .IP """timer_create""" 4 .el .IP \f(CWtimer_create\fR 4 .IX Item "timer_create" timerid = timer_create(clockid, signal=undef); .Sp Creates a new per-process interval timer using the clock given by \fIclock_id\fR as the timing base. \fIsignal\fR is the signal number to be delivered when the timer expires. If \fIsignal\fR is omitted or undef, no signal is delivered and the progress of the timer can be monitored using \&\f(CWtimer_gettime()\fR. .Sp Calling a notification function on timer expiration is currently not supported. .Sp Returns undef on error. .Sp \&\fINew in version 0.16.\fR .Sp \&\fIChanged in version 0.22:\fR \fIsignal\fR is optional. .ie n .IP """timer_delete""" 4 .el .IP \f(CWtimer_delete\fR 4 .IX Item "timer_delete" ret = timer_delete(timerid); .Sp Returns \f(CW\*(C`0 but true\*(C'\fR on success, undef on error. .Sp \&\fINew in version 0.16.\fR .ie n .IP """timer_getoverrun""" 4 .el .IP \f(CWtimer_getoverrun\fR 4 .IX Item "timer_getoverrun" count = timer_getoverrun(timerid); .Sp Returns undef on error. .Sp \&\fINew in version 0.16.\fR .ie n .IP """timer_gettime""" 4 .el .IP \f(CWtimer_gettime\fR 4 .IX Item "timer_gettime" (interval_sec, interval_nsec, initial_sec, initial_nsec) = timer_gettime(timerid); .Sp Returns the empty list on error. .Sp \&\fINew in version 0.16.\fR .ie n .IP """timer_settime""" 4 .el .IP \f(CWtimer_settime\fR 4 .IX Item "timer_settime" (old_int_sec, old_int_nsec, old_init_sec, old_init_nsec) = timer_settime(timerid, flags, int_sec, int_nsec, [init_sec, init_nsec]); .Sp \&\fIflags\fR may be 0 or \f(CW\*(C`TIMER_ABSTIME\*(C'\fR. If the \fIinit\fR values are omitted, they are set to the \fIint\fR values. .Sp \&\fINew in version 0.16.\fR .ie n .IP """truncate""" 4 .el .IP \f(CWtruncate\fR 4 .IX Item "truncate" ret = truncate(what, length); .Sp \&\f(CW\*(C`what\*(C'\fR can be a path, a Perl file handle, or a file descriptor. .Sp Note that it does not flush the file handle before truncating. Perl's built-in \&\fBtruncate()\fR does (this is undocumented, probably because it's silly). .Sp \&\fIChanged in version 0.19:\fR Deprecated \fIftruncate\fR now covered by \fItruncate\fR. .ie n .IP """trunc""" 4 .el .IP \f(CWtrunc\fR 4 .IX Item "trunc" y = trunc(x); .ie n .IP """ttyname""" 4 .el .IP \f(CWttyname\fR 4 .IX Item "ttyname" name = ttyname(fd); .Sp Calls \f(CWttyname_r()\fR if available. .Sp \&\fINew in version 0.19.\fR .Sp \&\fIChanged in version 0.22:\fR \fIfd\fR may also be a file handle. .ie n .IP """unlink""" 4 .el .IP \f(CWunlink\fR 4 .IX Item "unlink" ret = unlink(path); .Sp Calls the actual C library function \f(CWunlink()\fR. .Sp Note that core \f(CWPOSIX::unlink()\fR calls \f(CWCORE::unlink()\fR, which, unless you start Perl with \f(CW\*(C`\-U\*(C'\fR, a) is prone to time\-of\-check/time\-of\-use race conditions due to an additional \fBlstat()\fR, and b) blindly fails with \f(CW\*(C`EISDIR\*(C'\fR for directories (due to said \fBlstat()\fR), ignoring that some OSes use \f(CW\*(C`EPERM\*(C'\fR in this case (as required by POSIX). .ie n .IP """unlinkat""" 4 .el .IP \f(CWunlinkat\fR 4 .IX Item "unlinkat" ret = unlinkat(dirfd, path, flags=0); .Sp \&\fIflags\fR can be 0 or \f(CW\*(C`AT_REMOVEDIR\*(C'\fR. .ie n .IP """utimensat""" 4 .el .IP \f(CWutimensat\fR 4 .IX Item "utimensat" ret = utimensat(dirfd, path, flags, atime_sec, atime_nsec, mtime_sec, mtime_nsec); .Sp \&\fIflags\fR can be 0 or \f(CW\*(C`AT_SYMLINK_NOFOLLOW\*(C'\fR, defaults to 0. Your system might support a different set of flags. .Sp \&\fIatime_sec\fR and \fImtime_sec\fR default to 0. \fIatime_nsec\fR and \fImtime_nsec\fR default to \f(CW\*(C`UTIME_NOW\*(C'\fR. .ie n .IP """write""" 4 .el .IP \f(CWwrite\fR 4 .IX Item "write" bytes_written = write(fd, buf, count=undef); .Sp Like \f(CWPOSIX::write()\fR but returns 0 instead of \f(CW\*(C`0 but true\*(C'\fR if 0 bytes were written, and never writes more bytes than \fIbuf\fR contains even if \fIcount\fR exceeds the length of \fIbuf\fR. .Sp If \fIcount\fR is omitted or undef, it defaults to the length of \fIbuf\fR. .ie n .IP """writev""" 4 .el .IP \f(CWwritev\fR 4 .IX Item "writev" bytes_written = writev(fd, buffers); .Sp \&\f(CWwritev()\fR writes multiple \fIbuffers\fR of data to the file associated with the file descriptor \fIfd\fR. .Sp \&\fIbuffers\fR must be an array reference, i.e. \f(CW\*(C`\e@buf\*(C'\fR, \f(CW$buf\fR or \f(CW\*(C`[...]\*(C'\fR. The buffers are processed in array order. Undefined or empty elements are skipped. .Sp Returns the number of bytes written or undef on error. .Sp \&\fINew in version 0.08.\fR .ie n .IP """y0""" 4 .el .IP \f(CWy0\fR 4 .IX Item "y0" y = y0(x); .Sp \&\f(CWy0()\fR is the Bessel function of the second kind of order 0. .ie n .IP """y1""" 4 .el .IP \f(CWy1\fR 4 .IX Item "y1" y = y1(x); .Sp \&\f(CWy1()\fR is the Bessel function of the second kind of order 1. .ie n .IP """yn""" 4 .el .IP \f(CWyn\fR 4 .IX Item "yn" y = yn(n, x); .Sp \&\f(CWyn()\fR is the Bessel function of the second kind of order n. .SH EXPORTS .IX Header "EXPORTS" This module does not export anything by default. The following export tags are available: .PP .Vb 10 \& :at All *at() functions like openat(), all AT_/RENAME_/RESOLVE_ constants \& :id All get/set*id() functions like getuid() etc. \& :is All is* functions like isdigit() etc. \& :rw read(), readv(), write(), writev() \& :prw pread(), preadv(), preadv2(), pwrite(), pwritev(), pwritev2() \& :clock All clock* functions and CLOCK_ constants \& :fcntl All F_, FD_, O_, POSIX_FADV_, SEEK_, _OK constants (for AT_ use :at) \& :fenv_h All FE_ constants and fe* functions \& :fnm fnmatch() and all FNM_ constants \& :stat_h All S_I* and UTIME_ constants \& :time_h All CLOCK_ and TIMER_ constants \& :timer All timer_ functions and TIMER_ constants \& :utmpx_h All *utx* functions and utmpx.h constants \& :confstr confstr() and all _CS_ constants \& :pathconf pathconf() and all _PC_ constants \& :sysconf sysconf() and all _SC_ constants .Ve .PP \&\fINew in version 0.19:\fR :stat_h export tag. .PP \&\fINew in version 0.20:\fR :fenv_h export tag. .PP \&\fINew in version 0.22:\fR :confstr, :pathconf, :sysconf export tags. .SH CONSTANTS .IX Header "CONSTANTS" \&\f(CW\*(C`AT_EACCESS\*(C'\fR \f(CW\*(C`AT_EMPTY_PATH\*(C'\fR \f(CW\*(C`AT_FDCWD\*(C'\fR \f(CW\*(C`AT_NO_AUTOMOUNT\*(C'\fR \f(CW\*(C`AT_REMOVEDIR\*(C'\fR \&\f(CW\*(C`AT_RESOLVE_BENEATH\*(C'\fR \f(CW\*(C`AT_SYMLINK_FOLLOW\*(C'\fR \f(CW\*(C`AT_SYMLINK_NOFOLLOW\*(C'\fR \&\f(CW\*(C`RENAME_EXCHANGE\*(C'\fR \f(CW\*(C`RENAME_NOREPLACE\*(C'\fR \f(CW\*(C`RENAME_WHITEOUT\*(C'\fR \f(CW\*(C`RESOLVE_BENEATH\*(C'\fR \&\f(CW\*(C`RESOLVE_CACHED\*(C'\fR \f(CW\*(C`RESOLVE_IN_ROOT\*(C'\fR \f(CW\*(C`RESOLVE_NO_MAGICLINKS\*(C'\fR \&\f(CW\*(C`RESOLVE_NO_SYMLINKS\*(C'\fR \f(CW\*(C`RESOLVE_NO_XDEV\*(C'\fR .PP \&\f(CW\*(C`ACCOUNTING\*(C'\fR \f(CW\*(C`EMPTY\*(C'\fR \f(CW\*(C`BOOT_TIME\*(C'\fR \f(CW\*(C`NEW_TIME\*(C'\fR \f(CW\*(C`OLD_TIME\*(C'\fR \f(CW\*(C`DEAD_PROCESS\*(C'\fR \&\f(CW\*(C`INIT_PROCESS\*(C'\fR \f(CW\*(C`LOGIN_PROCESS\*(C'\fR \f(CW\*(C`USER_PROCESS\*(C'\fR \f(CW\*(C`RUN_LVL\*(C'\fR .PP \&\f(CW\*(C`CLOCK_BOOTTIME\*(C'\fR \f(CW\*(C`CLOCK_HIGHRES\*(C'\fR \f(CW\*(C`CLOCK_MONOTONIC\*(C'\fR \&\f(CW\*(C`CLOCK_MONOTONIC_COARSE\*(C'\fR \f(CW\*(C`CLOCK_MONOTONIC_FAST\*(C'\fR \f(CW\*(C`CLOCK_MONOTONIC_PRECISE\*(C'\fR \&\f(CW\*(C`CLOCK_MONOTONIC_RAW\*(C'\fR \f(CW\*(C`CLOCK_PROCESS_CPUTIME_ID\*(C'\fR \f(CW\*(C`CLOCK_REALTIME\*(C'\fR \&\f(CW\*(C`CLOCK_REALTIME_COARSE\*(C'\fR \f(CW\*(C`CLOCK_REALTIME_FAST\*(C'\fR \f(CW\*(C`CLOCK_REALTIME_PRECISE\*(C'\fR \&\f(CW\*(C`CLOCK_SOFTTIME\*(C'\fR \f(CW\*(C`CLOCK_THREAD_CPUTIME_ID\*(C'\fR \f(CW\*(C`CLOCK_UPTIME\*(C'\fR \&\f(CW\*(C`CLOCK_UPTIME_FAST\*(C'\fR \f(CW\*(C`CLOCK_UPTIME_PRECISE\*(C'\fR .PP \&\f(CW\*(C`F_DUPFD\*(C'\fR \f(CW\*(C`F_DUPFD_CLOEXEC\*(C'\fR \f(CW\*(C`F_GETFD\*(C'\fR \f(CW\*(C`F_SETFD\*(C'\fR \f(CW\*(C`F_GETFL\*(C'\fR \&\f(CW\*(C`F_SETFL\*(C'\fR \f(CW\*(C`F_GETLK\*(C'\fR \f(CW\*(C`F_SETLK\*(C'\fR \f(CW\*(C`F_SETLKW\*(C'\fR \f(CW\*(C`F_GETOWN\*(C'\fR \f(CW\*(C`F_SETOWN\*(C'\fR \&\f(CW\*(C`F_RDLCK\*(C'\fR \f(CW\*(C`F_UNLCK\*(C'\fR \f(CW\*(C`F_WRLCK\*(C'\fR .PP \&\f(CW\*(C`FD_CLOEXEC\*(C'\fR .PP \&\f(CW\*(C`FE_ALL_EXCEPT\*(C'\fR \f(CW\*(C`FE_DIVBYZERO\*(C'\fR \f(CW\*(C`FE_INEXACT\*(C'\fR \f(CW\*(C`FE_INVALID\*(C'\fR \f(CW\*(C`FE_OVERFLOW\*(C'\fR \&\f(CW\*(C`FE_UNDERFLOW\*(C'\fR \f(CW\*(C`FE_TONEAREST\*(C'\fR \f(CW\*(C`FE_TOWARDZERO\*(C'\fR \f(CW\*(C`FE_UPWARD\*(C'\fR \f(CW\*(C`FE_DOWNWARD\*(C'\fR .PP \&\f(CW\*(C`FNM_CASEFOLD\*(C'\fR \f(CW\*(C`FNM_FILE_NAME\*(C'\fR \f(CW\*(C`FNM_LEADING_DIR\*(C'\fR \f(CW\*(C`FNM_NOESCAPE\*(C'\fR \&\f(CW\*(C`FNM_NOMATCH\*(C'\fR \f(CW\*(C`FNM_PATHNAME\*(C'\fR \f(CW\*(C`FNM_PERIOD\*(C'\fR .PP \&\f(CW\*(C`FP_INFINITE\*(C'\fR \f(CW\*(C`FP_NAN\*(C'\fR \f(CW\*(C`FP_NORMAL\*(C'\fR \f(CW\*(C`FP_SUBNORMAL\*(C'\fR \f(CW\*(C`FP_ZERO\*(C'\fR .PP \&\f(CW\*(C`TIMER_ABSTIME\*(C'\fR \f(CW\*(C`ITIMER_PROF\*(C'\fR \f(CW\*(C`ITIMER_REAL\*(C'\fR \f(CW\*(C`ITIMER_VIRTUAL\*(C'\fR .PP \&\f(CW\*(C`O_ACCMODE\*(C'\fR \f(CW\*(C`O_APPEND\*(C'\fR \f(CW\*(C`O_ASYNC\*(C'\fR \f(CW\*(C`O_CLOEXEC\*(C'\fR \f(CW\*(C`O_CREAT\*(C'\fR \f(CW\*(C`O_DIRECT\*(C'\fR \&\f(CW\*(C`O_DIRECTORY\*(C'\fR \f(CW\*(C`O_DSYNC\*(C'\fR \f(CW\*(C`O_EMPTY_PATH\*(C'\fR \f(CW\*(C`O_EXCL\*(C'\fR \f(CW\*(C`O_EXEC\*(C'\fR \f(CW\*(C`O_EXLOCK\*(C'\fR \&\f(CW\*(C`O_LARGEFILE\*(C'\fR \f(CW\*(C`O_NDELAY\*(C'\fR \f(CW\*(C`O_NOATIME\*(C'\fR \f(CW\*(C`O_NOCTTY\*(C'\fR \f(CW\*(C`O_NOFOLLOW\*(C'\fR \&\f(CW\*(C`O_NONBLOCK\*(C'\fR \f(CW\*(C`O_NOSIGPIPE\*(C'\fR \f(CW\*(C`O_PATH\*(C'\fR \f(CW\*(C`O_RDONLY\*(C'\fR \f(CW\*(C`O_REGULAR\*(C'\fR \&\f(CW\*(C`O_RESOLVE_BENEATH\*(C'\fR \f(CW\*(C`O_RDWR\*(C'\fR \f(CW\*(C`O_RSYNC\*(C'\fR \f(CW\*(C`O_SEARCH\*(C'\fR \f(CW\*(C`O_SHLOCK\*(C'\fR \f(CW\*(C`O_SYNC\*(C'\fR \&\f(CW\*(C`O_TMPFILE\*(C'\fR \f(CW\*(C`O_TRUNC\*(C'\fR \f(CW\*(C`O_TTY_INIT\*(C'\fR \f(CW\*(C`O_WRONLY\*(C'\fR \f(CW\*(C`FASYNC\*(C'\fR .PP \&\f(CW\*(C`POSIX_FADV_NORMAL\*(C'\fR \f(CW\*(C`POSIX_FADV_SEQUENTIAL\*(C'\fR \f(CW\*(C`POSIX_FADV_RANDOM\*(C'\fR \&\f(CW\*(C`POSIX_FADV_NOREUSE\*(C'\fR \f(CW\*(C`POSIX_FADV_WILLNEED\*(C'\fR \f(CW\*(C`POSIX_FADV_DONTNEED\*(C'\fR .PP \&\f(CW\*(C`PRIO_PROCESS\*(C'\fR \f(CW\*(C`PRIO_PGRP\*(C'\fR \f(CW\*(C`PRIO_USER\*(C'\fR .PP \&\f(CW\*(C`RTLD_DEEPBIND\*(C'\fR \f(CW\*(C`RTLD_GLOBAL\*(C'\fR \f(CW\*(C`RTLD_LAZY\*(C'\fR \f(CW\*(C`RTLD_LOCAL\*(C'\fR \f(CW\*(C`RTLD_MEMBER\*(C'\fR \&\f(CW\*(C`RTLD_NOAUTODEFER\*(C'\fR \f(CW\*(C`RTLD_NODELETE\*(C'\fR \f(CW\*(C`RTLD_NOLOAD\*(C'\fR \f(CW\*(C`RTLD_NOW\*(C'\fR .PP \&\f(CW\*(C`RWF_APPEND\*(C'\fR \f(CW\*(C`RWF_DSYNC\*(C'\fR \f(CW\*(C`RWF_HIPRI\*(C'\fR \f(CW\*(C`RWF_NOWAIT\*(C'\fR \f(CW\*(C`RWF_SYNC\*(C'\fR .PP \&\f(CW\*(C`SEEK_SET\*(C'\fR \f(CW\*(C`SEEK_CUR\*(C'\fR \f(CW\*(C`SEEK_END\*(C'\fR \f(CW\*(C`SEEK_DATA\*(C'\fR \f(CW\*(C`SEEK_HOLE\*(C'\fR \f(CW\*(C`F_OK\*(C'\fR \f(CW\*(C`R_OK\*(C'\fR \&\f(CW\*(C`W_OK\*(C'\fR \f(CW\*(C`X_OK\*(C'\fR .PP \&\f(CW\*(C`S_IFMT\*(C'\fR \f(CW\*(C`S_IFBLK\*(C'\fR \f(CW\*(C`S_IFCHR\*(C'\fR \f(CW\*(C`S_IFIFO\*(C'\fR \f(CW\*(C`S_IFREG\*(C'\fR \f(CW\*(C`S_IFDIR\*(C'\fR \f(CW\*(C`S_IFLNK\*(C'\fR \&\f(CW\*(C`S_IFSOCK\*(C'\fR \f(CW\*(C`S_ISUID\*(C'\fR \f(CW\*(C`S_ISGID\*(C'\fR \f(CW\*(C`S_IRWXU\*(C'\fR \f(CW\*(C`S_IRUSR\*(C'\fR \f(CW\*(C`S_IWUSR\*(C'\fR \f(CW\*(C`S_IXUSR\*(C'\fR \&\f(CW\*(C`S_IRWXG\*(C'\fR \f(CW\*(C`S_IRGRP\*(C'\fR \f(CW\*(C`S_IWGRP\*(C'\fR \f(CW\*(C`S_IXGRP\*(C'\fR \f(CW\*(C`S_IRWXO\*(C'\fR \f(CW\*(C`S_IROTH\*(C'\fR \f(CW\*(C`S_IWOTH\*(C'\fR \&\f(CW\*(C`S_IXOTH\*(C'\fR \f(CW\*(C`S_ISVTX\*(C'\fR .PP \&\f(CW\*(C`UTIME_NOW\*(C'\fR \f(CW\*(C`UTIME_OMIT\*(C'\fR .PP \&\f(CW\*(C`_CS_GNU_LIBC_VERSION\*(C'\fR \f(CW\*(C`_CS_GNU_LIBPTHREAD_VERSION\*(C'\fR \f(CW\*(C`_CS_LFS64_CFLAGS\*(C'\fR \&\f(CW\*(C`_CS_LFS64_LDFLAGS\*(C'\fR \f(CW\*(C`_CS_LFS64_LIBS\*(C'\fR \f(CW\*(C`_CS_LFS64_LINTFLAGS\*(C'\fR \&\f(CW\*(C`_CS_LFS_CFLAGS\*(C'\fR \f(CW\*(C`_CS_LFS_LDFLAGS\*(C'\fR \f(CW\*(C`_CS_LFS_LIBS\*(C'\fR \f(CW\*(C`_CS_LFS_LINTFLAGS\*(C'\fR \&\f(CW\*(C`_CS_PATH\*(C'\fR \f(CW\*(C`_CS_POSIX_V5_WIDTH_RESTRICTED_ENVS\*(C'\fR \&\f(CW\*(C`_CS_POSIX_V6_ILP32_OFF32_CFLAGS\*(C'\fR \f(CW\*(C`_CS_POSIX_V6_ILP32_OFF32_LDFLAGS\*(C'\fR \&\f(CW\*(C`_CS_POSIX_V6_ILP32_OFF32_LIBS\*(C'\fR \f(CW\*(C`_CS_POSIX_V6_ILP32_OFF32_LINTFLAGS\*(C'\fR \&\f(CW\*(C`_CS_POSIX_V6_ILP32_OFFBIG_CFLAGS\*(C'\fR \f(CW\*(C`_CS_POSIX_V6_ILP32_OFFBIG_LDFLAGS\*(C'\fR \&\f(CW\*(C`_CS_POSIX_V6_ILP32_OFFBIG_LIBS\*(C'\fR \f(CW\*(C`_CS_POSIX_V6_ILP32_OFFBIG_LINTFLAGS\*(C'\fR \&\f(CW\*(C`_CS_POSIX_V6_LP64_OFF64_CFLAGS\*(C'\fR \f(CW\*(C`_CS_POSIX_V6_LP64_OFF64_LDFLAGS\*(C'\fR \&\f(CW\*(C`_CS_POSIX_V6_LP64_OFF64_LIBS\*(C'\fR \f(CW\*(C`_CS_POSIX_V6_LP64_OFF64_LINTFLAGS\*(C'\fR \&\f(CW\*(C`_CS_POSIX_V6_LPBIG_OFFBIG_CFLAGS\*(C'\fR \f(CW\*(C`_CS_POSIX_V6_LPBIG_OFFBIG_LDFLAGS\*(C'\fR \&\f(CW\*(C`_CS_POSIX_V6_LPBIG_OFFBIG_LIBS\*(C'\fR \f(CW\*(C`_CS_POSIX_V6_LPBIG_OFFBIG_LINTFLAGS\*(C'\fR \&\f(CW\*(C`_CS_POSIX_V6_WIDTH_RESTRICTED_ENVS\*(C'\fR \f(CW\*(C`_CS_POSIX_V7_ILP32_OFF32_CFLAGS\*(C'\fR \&\f(CW\*(C`_CS_POSIX_V7_ILP32_OFF32_LDFLAGS\*(C'\fR \f(CW\*(C`_CS_POSIX_V7_ILP32_OFF32_LIBS\*(C'\fR \&\f(CW\*(C`_CS_POSIX_V7_ILP32_OFF32_LINTFLAGS\*(C'\fR \f(CW\*(C`_CS_POSIX_V7_ILP32_OFFBIG_CFLAGS\*(C'\fR \&\f(CW\*(C`_CS_POSIX_V7_ILP32_OFFBIG_LDFLAGS\*(C'\fR \f(CW\*(C`_CS_POSIX_V7_ILP32_OFFBIG_LIBS\*(C'\fR \&\f(CW\*(C`_CS_POSIX_V7_ILP32_OFFBIG_LINTFLAGS\*(C'\fR \f(CW\*(C`_CS_POSIX_V7_LP64_OFF64_CFLAGS\*(C'\fR \&\f(CW\*(C`_CS_POSIX_V7_LP64_OFF64_LDFLAGS\*(C'\fR \f(CW\*(C`_CS_POSIX_V7_LP64_OFF64_LIBS\*(C'\fR \&\f(CW\*(C`_CS_POSIX_V7_LP64_OFF64_LINTFLAGS\*(C'\fR \f(CW\*(C`_CS_POSIX_V7_LPBIG_OFFBIG_CFLAGS\*(C'\fR \&\f(CW\*(C`_CS_POSIX_V7_LPBIG_OFFBIG_LDFLAGS\*(C'\fR \f(CW\*(C`_CS_POSIX_V7_LPBIG_OFFBIG_LIBS\*(C'\fR \&\f(CW\*(C`_CS_POSIX_V7_LPBIG_OFFBIG_LINTFLAGS\*(C'\fR \f(CW\*(C`_CS_POSIX_V7_WIDTH_RESTRICTED_ENVS\*(C'\fR \&\f(CW\*(C`_CS_V5_WIDTH_RESTRICTED_ENVS\*(C'\fR \f(CW\*(C`_CS_V6_ENV\*(C'\fR \f(CW\*(C`_CS_V6_WIDTH_RESTRICTED_ENVS\*(C'\fR \&\f(CW\*(C`_CS_V7_ENV\*(C'\fR \f(CW\*(C`_CS_V7_WIDTH_RESTRICTED_ENVS\*(C'\fR \f(CW\*(C`_CS_XBS5_ILP32_OFF32_CFLAGS\*(C'\fR \&\f(CW\*(C`_CS_XBS5_ILP32_OFF32_LDFLAGS\*(C'\fR \f(CW\*(C`_CS_XBS5_ILP32_OFF32_LIBS\*(C'\fR \&\f(CW\*(C`_CS_XBS5_ILP32_OFF32_LINTFLAGS\*(C'\fR \f(CW\*(C`_CS_XBS5_ILP32_OFFBIG_CFLAGS\*(C'\fR \&\f(CW\*(C`_CS_XBS5_ILP32_OFFBIG_LDFLAGS\*(C'\fR \f(CW\*(C`_CS_XBS5_ILP32_OFFBIG_LIBS\*(C'\fR \&\f(CW\*(C`_CS_XBS5_ILP32_OFFBIG_LINTFLAGS\*(C'\fR \f(CW\*(C`_CS_XBS5_LP64_OFF64_CFLAGS\*(C'\fR \&\f(CW\*(C`_CS_XBS5_LP64_OFF64_LDFLAGS\*(C'\fR \f(CW\*(C`_CS_XBS5_LP64_OFF64_LIBS\*(C'\fR \&\f(CW\*(C`_CS_XBS5_LP64_OFF64_LINTFLAGS\*(C'\fR \f(CW\*(C`_CS_XBS5_LPBIG_OFFBIG_CFLAGS\*(C'\fR \&\f(CW\*(C`_CS_XBS5_LPBIG_OFFBIG_LDFLAGS\*(C'\fR \f(CW\*(C`_CS_XBS5_LPBIG_OFFBIG_LIBS\*(C'\fR \&\f(CW\*(C`_CS_XBS5_LPBIG_OFFBIG_LINTFLAGS\*(C'\fR .PP \&\f(CW\*(C`_PC_2_SYMLINKS\*(C'\fR \f(CW\*(C`_PC_ALLOC_SIZE_MIN\*(C'\fR \f(CW\*(C`_PC_ASYNC_IO\*(C'\fR \&\f(CW\*(C`_PC_CHOWN_RESTRICTED\*(C'\fR \f(CW\*(C`_PC_FILESIZEBITS\*(C'\fR \f(CW\*(C`_PC_LINK_MAX\*(C'\fR \f(CW\*(C`_PC_MAX_CANON\*(C'\fR \&\f(CW\*(C`_PC_MAX_INPUT\*(C'\fR \f(CW\*(C`_PC_NAME_MAX\*(C'\fR \f(CW\*(C`_PC_NO_TRUNC\*(C'\fR \f(CW\*(C`_PC_PATH_MAX\*(C'\fR \&\f(CW\*(C`_PC_PIPE_BUF\*(C'\fR \f(CW\*(C`_PC_PRIO_IO\*(C'\fR \f(CW\*(C`_PC_REC_INCR_XFER_SIZE\*(C'\fR \&\f(CW\*(C`_PC_REC_MAX_XFER_SIZE\*(C'\fR \f(CW\*(C`_PC_REC_MIN_XFER_SIZE\*(C'\fR \f(CW\*(C`_PC_REC_XFER_ALIGN\*(C'\fR \&\f(CW\*(C`_PC_SOCK_MAXBUF\*(C'\fR \f(CW\*(C`_PC_SYMLINK_MAX\*(C'\fR \f(CW\*(C`_PC_SYNC_IO\*(C'\fR \f(CW\*(C`_PC_VDISABLE\*(C'\fR .PP \&\f(CW\*(C`_SC_2_CHAR_TERM\*(C'\fR \f(CW\*(C`_SC_2_C_BIND\*(C'\fR \f(CW\*(C`_SC_2_C_DEV\*(C'\fR \f(CW\*(C`_SC_2_C_VERSION\*(C'\fR \&\f(CW\*(C`_SC_2_FORT_DEV\*(C'\fR \f(CW\*(C`_SC_2_FORT_RUN\*(C'\fR \f(CW\*(C`_SC_2_LOCALEDEF\*(C'\fR \f(CW\*(C`_SC_2_PBS\*(C'\fR \&\f(CW\*(C`_SC_2_PBS_ACCOUNTING\*(C'\fR \f(CW\*(C`_SC_2_PBS_CHECKPOINT\*(C'\fR \f(CW\*(C`_SC_2_PBS_LOCATE\*(C'\fR \&\f(CW\*(C`_SC_2_PBS_MESSAGE\*(C'\fR \f(CW\*(C`_SC_2_PBS_TRACK\*(C'\fR \f(CW\*(C`_SC_2_SW_DEV\*(C'\fR \f(CW\*(C`_SC_2_UPE\*(C'\fR \&\f(CW\*(C`_SC_2_VERSION\*(C'\fR \f(CW\*(C`_SC_ADVISORY_INFO\*(C'\fR \f(CW\*(C`_SC_AIO_LISTIO_MAX\*(C'\fR \f(CW\*(C`_SC_AIO_MAX\*(C'\fR \&\f(CW\*(C`_SC_AIO_PRIO_DELTA_MAX\*(C'\fR \f(CW\*(C`_SC_ARG_MAX\*(C'\fR \f(CW\*(C`_SC_ASYNCHRONOUS_IO\*(C'\fR \&\f(CW\*(C`_SC_ATEXIT_MAX\*(C'\fR \f(CW\*(C`_SC_AVPHYS_PAGES\*(C'\fR \f(CW\*(C`_SC_BARRIERS\*(C'\fR \f(CW\*(C`_SC_BASE\*(C'\fR \&\f(CW\*(C`_SC_BC_BASE_MAX\*(C'\fR \f(CW\*(C`_SC_BC_DIM_MAX\*(C'\fR \f(CW\*(C`_SC_BC_SCALE_MAX\*(C'\fR \f(CW\*(C`_SC_BC_STRING_MAX\*(C'\fR \&\f(CW\*(C`_SC_CHARCLASS_NAME_MAX\*(C'\fR \f(CW\*(C`_SC_CHAR_BIT\*(C'\fR \f(CW\*(C`_SC_CHAR_MAX\*(C'\fR \f(CW\*(C`_SC_CHAR_MIN\*(C'\fR \&\f(CW\*(C`_SC_CHILD_MAX\*(C'\fR \f(CW\*(C`_SC_CLK_TCK\*(C'\fR \f(CW\*(C`_SC_CLOCK_SELECTION\*(C'\fR \f(CW\*(C`_SC_COLL_WEIGHTS_MAX\*(C'\fR \&\f(CW\*(C`_SC_CPUTIME\*(C'\fR \f(CW\*(C`_SC_C_LANG_SUPPORT\*(C'\fR \f(CW\*(C`_SC_C_LANG_SUPPORT_R\*(C'\fR \&\f(CW\*(C`_SC_DELAYTIMER_MAX\*(C'\fR \f(CW\*(C`_SC_DEVICE_IO\*(C'\fR \f(CW\*(C`_SC_DEVICE_SPECIFIC\*(C'\fR \&\f(CW\*(C`_SC_DEVICE_SPECIFIC_R\*(C'\fR \f(CW\*(C`_SC_EQUIV_CLASS_MAX\*(C'\fR \f(CW\*(C`_SC_EXPR_NEST_MAX\*(C'\fR \&\f(CW\*(C`_SC_FD_MGMT\*(C'\fR \f(CW\*(C`_SC_FIFO\*(C'\fR \f(CW\*(C`_SC_FILE_ATTRIBUTES\*(C'\fR \f(CW\*(C`_SC_FILE_LOCKING\*(C'\fR \&\f(CW\*(C`_SC_FILE_SYSTEM\*(C'\fR \f(CW\*(C`_SC_FSYNC\*(C'\fR \f(CW\*(C`_SC_GETGR_R_SIZE_MAX\*(C'\fR \&\f(CW\*(C`_SC_GETPW_R_SIZE_MAX\*(C'\fR \f(CW\*(C`_SC_HOST_NAME_MAX\*(C'\fR \f(CW\*(C`_SC_INT_MAX\*(C'\fR \f(CW\*(C`_SC_INT_MIN\*(C'\fR \&\f(CW\*(C`_SC_IOV_MAX\*(C'\fR \f(CW\*(C`_SC_IPV6\*(C'\fR \f(CW\*(C`_SC_JOB_CONTROL\*(C'\fR \f(CW\*(C`_SC_LEVEL1_DCACHE_ASSOC\*(C'\fR \&\f(CW\*(C`_SC_LEVEL1_DCACHE_LINESIZE\*(C'\fR \f(CW\*(C`_SC_LEVEL1_DCACHE_SIZE\*(C'\fR \&\f(CW\*(C`_SC_LEVEL1_ICACHE_ASSOC\*(C'\fR \f(CW\*(C`_SC_LEVEL1_ICACHE_LINESIZE\*(C'\fR \&\f(CW\*(C`_SC_LEVEL1_ICACHE_SIZE\*(C'\fR \f(CW\*(C`_SC_LEVEL2_CACHE_ASSOC\*(C'\fR \&\f(CW\*(C`_SC_LEVEL2_CACHE_LINESIZE\*(C'\fR \f(CW\*(C`_SC_LEVEL2_CACHE_SIZE\*(C'\fR \&\f(CW\*(C`_SC_LEVEL3_CACHE_ASSOC\*(C'\fR \f(CW\*(C`_SC_LEVEL3_CACHE_LINESIZE\*(C'\fR \&\f(CW\*(C`_SC_LEVEL3_CACHE_SIZE\*(C'\fR \f(CW\*(C`_SC_LEVEL4_CACHE_ASSOC\*(C'\fR \&\f(CW\*(C`_SC_LEVEL4_CACHE_LINESIZE\*(C'\fR \f(CW\*(C`_SC_LEVEL4_CACHE_SIZE\*(C'\fR \f(CW\*(C`_SC_LINE_MAX\*(C'\fR \&\f(CW\*(C`_SC_LOGIN_NAME_MAX\*(C'\fR \f(CW\*(C`_SC_LONG_BIT\*(C'\fR \f(CW\*(C`_SC_MAPPED_FILES\*(C'\fR \f(CW\*(C`_SC_MB_LEN_MAX\*(C'\fR \&\f(CW\*(C`_SC_MEMLOCK\*(C'\fR \f(CW\*(C`_SC_MEMLOCK_RANGE\*(C'\fR \f(CW\*(C`_SC_MEMORY_PROTECTION\*(C'\fR \&\f(CW\*(C`_SC_MESSAGE_PASSING\*(C'\fR \f(CW\*(C`_SC_MINSIGSTKSZ\*(C'\fR \f(CW\*(C`_SC_MONOTONIC_CLOCK\*(C'\fR \&\f(CW\*(C`_SC_MQ_OPEN_MAX\*(C'\fR \f(CW\*(C`_SC_MQ_PRIO_MAX\*(C'\fR \f(CW\*(C`_SC_MULTI_PROCESS\*(C'\fR \f(CW\*(C`_SC_NETWORKING\*(C'\fR \&\f(CW\*(C`_SC_NGROUPS_MAX\*(C'\fR \f(CW\*(C`_SC_NL_ARGMAX\*(C'\fR \f(CW\*(C`_SC_NL_LANGMAX\*(C'\fR \f(CW\*(C`_SC_NL_MSGMAX\*(C'\fR \&\f(CW\*(C`_SC_NL_NMAX\*(C'\fR \f(CW\*(C`_SC_NL_SETMAX\*(C'\fR \f(CW\*(C`_SC_NL_TEXTMAX\*(C'\fR \f(CW\*(C`_SC_NPROCESSORS_CONF\*(C'\fR \&\f(CW\*(C`_SC_NPROCESSORS_ONLN\*(C'\fR \f(CW\*(C`_SC_NZERO\*(C'\fR \f(CW\*(C`_SC_OPEN_MAX\*(C'\fR \f(CW\*(C`_SC_PAGESIZE\*(C'\fR \&\f(CW\*(C`_SC_PAGE_SIZE\*(C'\fR \f(CW\*(C`_SC_PASS_MAX\*(C'\fR \f(CW\*(C`_SC_PHYS_PAGES\*(C'\fR \f(CW\*(C`_SC_PII\*(C'\fR \&\f(CW\*(C`_SC_PII_INTERNET\*(C'\fR \f(CW\*(C`_SC_PII_INTERNET_DGRAM\*(C'\fR \f(CW\*(C`_SC_PII_INTERNET_STREAM\*(C'\fR \&\f(CW\*(C`_SC_PII_OSI\*(C'\fR \f(CW\*(C`_SC_PII_OSI_CLTS\*(C'\fR \f(CW\*(C`_SC_PII_OSI_COTS\*(C'\fR \f(CW\*(C`_SC_PII_OSI_M\*(C'\fR \&\f(CW\*(C`_SC_PII_SOCKET\*(C'\fR \f(CW\*(C`_SC_PII_XTI\*(C'\fR \f(CW\*(C`_SC_PIPE\*(C'\fR \f(CW\*(C`_SC_POLL\*(C'\fR \f(CW\*(C`_SC_PRIORITIZED_IO\*(C'\fR \&\f(CW\*(C`_SC_PRIORITY_SCHEDULING\*(C'\fR \f(CW\*(C`_SC_RAW_SOCKETS\*(C'\fR \f(CW\*(C`_SC_READER_WRITER_LOCKS\*(C'\fR \&\f(CW\*(C`_SC_REALTIME_SIGNALS\*(C'\fR \f(CW\*(C`_SC_REGEXP\*(C'\fR \f(CW\*(C`_SC_REGEX_VERSION\*(C'\fR \f(CW\*(C`_SC_RE_DUP_MAX\*(C'\fR \&\f(CW\*(C`_SC_RTSIG_MAX\*(C'\fR \f(CW\*(C`_SC_SAVED_IDS\*(C'\fR \f(CW\*(C`_SC_SCHAR_MAX\*(C'\fR \f(CW\*(C`_SC_SCHAR_MIN\*(C'\fR \&\f(CW\*(C`_SC_SELECT\*(C'\fR \f(CW\*(C`_SC_SEMAPHORES\*(C'\fR \f(CW\*(C`_SC_SEM_NSEMS_MAX\*(C'\fR \f(CW\*(C`_SC_SEM_VALUE_MAX\*(C'\fR \&\f(CW\*(C`_SC_SHARED_MEMORY_OBJECTS\*(C'\fR \f(CW\*(C`_SC_SHELL\*(C'\fR \f(CW\*(C`_SC_SHRT_MAX\*(C'\fR \f(CW\*(C`_SC_SHRT_MIN\*(C'\fR \&\f(CW\*(C`_SC_SIGNALS\*(C'\fR \f(CW\*(C`_SC_SIGQUEUE_MAX\*(C'\fR \f(CW\*(C`_SC_SIGSTKSZ\*(C'\fR \f(CW\*(C`_SC_SINGLE_PROCESS\*(C'\fR \&\f(CW\*(C`_SC_SPAWN\*(C'\fR \f(CW\*(C`_SC_SPIN_LOCKS\*(C'\fR \f(CW\*(C`_SC_SPORADIC_SERVER\*(C'\fR \f(CW\*(C`_SC_SSIZE_MAX\*(C'\fR \&\f(CW\*(C`_SC_SS_REPL_MAX\*(C'\fR \f(CW\*(C`_SC_STREAMS\*(C'\fR \f(CW\*(C`_SC_STREAM_MAX\*(C'\fR \f(CW\*(C`_SC_SYMLOOP_MAX\*(C'\fR \&\f(CW\*(C`_SC_SYNCHRONIZED_IO\*(C'\fR \f(CW\*(C`_SC_SYSTEM_DATABASE\*(C'\fR \f(CW\*(C`_SC_SYSTEM_DATABASE_R\*(C'\fR \&\f(CW\*(C`_SC_THREADS\*(C'\fR \f(CW\*(C`_SC_THREAD_ATTR_STACKADDR\*(C'\fR \f(CW\*(C`_SC_THREAD_ATTR_STACKSIZE\*(C'\fR \&\f(CW\*(C`_SC_THREAD_CPUTIME\*(C'\fR \f(CW\*(C`_SC_THREAD_DESTRUCTOR_ITERATIONS\*(C'\fR \&\f(CW\*(C`_SC_THREAD_KEYS_MAX\*(C'\fR \f(CW\*(C`_SC_THREAD_PRIORITY_SCHEDULING\*(C'\fR \&\f(CW\*(C`_SC_THREAD_PRIO_INHERIT\*(C'\fR \f(CW\*(C`_SC_THREAD_PRIO_PROTECT\*(C'\fR \&\f(CW\*(C`_SC_THREAD_PROCESS_SHARED\*(C'\fR \f(CW\*(C`_SC_THREAD_ROBUST_PRIO_INHERIT\*(C'\fR \&\f(CW\*(C`_SC_THREAD_ROBUST_PRIO_PROTECT\*(C'\fR \f(CW\*(C`_SC_THREAD_SAFE_FUNCTIONS\*(C'\fR \&\f(CW\*(C`_SC_THREAD_SPORADIC_SERVER\*(C'\fR \f(CW\*(C`_SC_THREAD_STACK_MIN\*(C'\fR \&\f(CW\*(C`_SC_THREAD_THREADS_MAX\*(C'\fR \f(CW\*(C`_SC_TIMEOUTS\*(C'\fR \f(CW\*(C`_SC_TIMERS\*(C'\fR \f(CW\*(C`_SC_TIMER_MAX\*(C'\fR \&\f(CW\*(C`_SC_TRACE\*(C'\fR \f(CW\*(C`_SC_TRACE_EVENT_FILTER\*(C'\fR \f(CW\*(C`_SC_TRACE_EVENT_NAME_MAX\*(C'\fR \&\f(CW\*(C`_SC_TRACE_INHERIT\*(C'\fR \f(CW\*(C`_SC_TRACE_LOG\*(C'\fR \f(CW\*(C`_SC_TRACE_NAME_MAX\*(C'\fR \&\f(CW\*(C`_SC_TRACE_SYS_MAX\*(C'\fR \f(CW\*(C`_SC_TRACE_USER_EVENT_MAX\*(C'\fR \f(CW\*(C`_SC_TTY_NAME_MAX\*(C'\fR \&\f(CW\*(C`_SC_TYPED_MEMORY_OBJECTS\*(C'\fR \f(CW\*(C`_SC_TZNAME_MAX\*(C'\fR \f(CW\*(C`_SC_T_IOV_MAX\*(C'\fR \&\f(CW\*(C`_SC_UCHAR_MAX\*(C'\fR \f(CW\*(C`_SC_UINT_MAX\*(C'\fR \f(CW\*(C`_SC_UIO_MAXIOV\*(C'\fR \f(CW\*(C`_SC_ULONG_MAX\*(C'\fR \&\f(CW\*(C`_SC_USER_GROUPS\*(C'\fR \f(CW\*(C`_SC_USER_GROUPS_R\*(C'\fR \f(CW\*(C`_SC_USHRT_MAX\*(C'\fR \f(CW\*(C`_SC_V6_ILP32_OFF32\*(C'\fR \&\f(CW\*(C`_SC_V6_ILP32_OFFBIG\*(C'\fR \f(CW\*(C`_SC_V6_LP64_OFF64\*(C'\fR \f(CW\*(C`_SC_V6_LPBIG_OFFBIG\*(C'\fR \&\f(CW\*(C`_SC_V7_ILP32_OFF32\*(C'\fR \f(CW\*(C`_SC_V7_ILP32_OFFBIG\*(C'\fR \f(CW\*(C`_SC_V7_LP64_OFF64\*(C'\fR \&\f(CW\*(C`_SC_V7_LPBIG_OFFBIG\*(C'\fR \f(CW\*(C`_SC_VERSION\*(C'\fR \f(CW\*(C`_SC_WORD_BIT\*(C'\fR \f(CW\*(C`_SC_XBS5_ILP32_OFF32\*(C'\fR \&\f(CW\*(C`_SC_XBS5_ILP32_OFFBIG\*(C'\fR \f(CW\*(C`_SC_XBS5_LP64_OFF64\*(C'\fR \f(CW\*(C`_SC_XBS5_LPBIG_OFFBIG\*(C'\fR \&\f(CW\*(C`_SC_XOPEN_CRYPT\*(C'\fR \f(CW\*(C`_SC_XOPEN_ENH_I18N\*(C'\fR \f(CW\*(C`_SC_XOPEN_LEGACY\*(C'\fR \&\f(CW\*(C`_SC_XOPEN_REALTIME\*(C'\fR \f(CW\*(C`_SC_XOPEN_REALTIME_THREADS\*(C'\fR \f(CW\*(C`_SC_XOPEN_SHM\*(C'\fR \&\f(CW\*(C`_SC_XOPEN_STREAMS\*(C'\fR \f(CW\*(C`_SC_XOPEN_UNIX\*(C'\fR \f(CW\*(C`_SC_XOPEN_VERSION\*(C'\fR \&\f(CW\*(C`_SC_XOPEN_XCU_VERSION\*(C'\fR \f(CW\*(C`_SC_XOPEN_XPG2\*(C'\fR \f(CW\*(C`_SC_XOPEN_XPG3\*(C'\fR \f(CW\*(C`_SC_XOPEN_XPG4\*(C'\fR .SH NOTES .IX Header "NOTES" \&\f(CWremoveat()\fR is a home-grown nonstandard extension present only in this module. .PP \&\f(CWpreadv()\fR and \f(CWpwritev()\fR are nonstandard extensions present in Linux and BSD. .PP \&\f(CWexecveat()\fR, \f(CWopenat2()\fR, \f(CWpreadv2()\fR, \f(CWpwritev2()\fR and \f(CWrenameat2()\fR are nonstandard extensions present in Linux. .PP \&\f(CWfstatat()\fR, \f(CWlstat()\fR and \f(CWstat()\fR do not set the special underscore filehandle \f(CW\*(C`_\*(C'\fR (mostly because I have no clue how that works). .PP \&\f(CWopen()\fR, \f(CWopenat()\fR and \f(CWopenat2()\fR do not set the \f(CW\*(C`O_CLOEXEC\*(C'\fR flag automatically. You have to take care of that yourself if needed. .PP \&\f(CWisalnum()\fR and friends were cowardly removed from the POSIX module with Perl 5.24.0. They have found a cozy home here with a fix for a long-standing bug. .PP \&\f(CW\*(C`SEEK_DATA\*(C'\fR and \f(CW\*(C`SEEK_HOLE\*(C'\fR are nonstandard extensions present in Linux, Solaris, FreeBSD, and DragonFly BSD; they are proposed for inclusion in the next POSIX revision (Issue 8). .PP For some inexplicable reason, Perl forbids you to use the built-in \f(CWchmod()\fR and \f(CWchown()\fR on an \f(CWopendir()\fR handle and to use \f(CWreaddir()\fR and \&\f(CWrewinddir()\fR on a \f(CWsysopen()\fR handle (provided it refers to a directory). Needless to say that \f(CWchmod()\fR and \f(CWchown()\fR from POSIX::2008 happily work with \f(CWopendir()\fR handles, and of course you can use \f(CWreaddir()\fR and \&\f(CWrewinddir()\fR on an \f(CWopenat()\fR handle that refers to a directory. .SH AUTHOR .IX Header "AUTHOR" Initially hacked together by Carsten Gaebler. .SH LICENSE .IX Header "LICENSE" This library is free software. You can redistribute and/or modify it under the terms of the Do What The Fuck You Want To Public License, Version 2, as published by Sam Hocevar. See the COPYING file or for more details.