NAME
POSIX::2008 - Perl interface to POSIX.1-2008 and beyond
SYNOPSIS
use POSIX::2008 qw(:fcntl openat pwrite);
sysopen my $dh, '/tmp', O_RDONLY|O_DIRECTORY|O_NOFOLLOW
or die 'Dafuq?';
my $fh = openat($dh, 'foobar', O_RDWR|O_CREAT);
pwrite($fh, 'fuckyounsa', 10, 0);
DESCRIPTION
POSIX::2008 provides many of the interfaces specified by POSIX.1-2008 and later that the core POSIX module withholds, implements in Perl or fucked up.
It also ships a number of nonstandard interfaces and constants present in Linux, BSD and Solaris that are extensions of POSIX.
This module is provided "as is" unless someone volunteers to maintain it. Use at your own risk.
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 fdopen() and fdopendir().
Since version 0.22, returned handles support IO::Handle methods.
SYSTEM CALL RETURN VALUES
A system call return value of -1 meaning "error" is mapped to undef except for poll() and ppoll() which return -1 to be consistent with select().
A system call return value of 0 meaning "success" is mapped to "0 but true".
For system calls where 0 does not just mean "success", 0 is returned unchanged. These are creat(), open(), read(), write(), readv(), writev(), pread(), pwrite(), preadv(), pwritev(), preadv2(), pwritev2(), getpriority(), nice(). openat() gets a special treatment in this regard, see below.
FUNCTIONS
a64l-
l = a64l(s); abort-
abort(); abs-
ui = abs(i);Calls
llabs(),labs(), orabs(), whichever is the maximum supported by your system.Note that the library functions use signed integers, so
abs(~0)is 1. If you don't want that, useCORE::abs(). access-
rv = access(path, mode);New in version 0.08.
acos-
y = acos(x); acosh-
y = acosh(x); alarm-
remaining_sec = alarm(sec); asin-
y = asin(x); asinh-
y = asinh(x); atan2-
z = atan2(y, x); atan-
y = atan(x); atanh-
y = atanh(x); atof-
f = atof(s); atoi-
i = atoi(s);Calls
atoll(),atol(), oratoi(), whichever is the maximum supported by your system. This is of course silly because you could just useint().Changed in version 0.19: Deprecated atol and atoll now covered by atoi.
basename-
s = basename(path); cabs-
r = cabs(re, im); cacos-
(re, im) = cacos(re, im); cacosh-
(re, im) = cacosh(re, im); carg-
phi = carg(re, im); casin-
y = casin(x); casinh-
(re, im) = casinh(re, im); catan-
(re, im) = catan(re, im); catanh-
(re, im) = catanh(re, im); catclose-
rv = catclose(catd); catgets-
s = catgets(catd, set_id, msg_id, dflt_string); catopen-
catd = catopen(name, flag); cbrt-
y = cbrt(x); ccos-
(re, im) = ccos(re, im); ccosh-
(re, im) = ccosh(re, im); ceil-
y = ceil(x); cexp-
(re, im) = cexp(re, im);New in version 0.19.
chdir-
rv = chdir(dir);dircan be a path, a Perl file or directory handle, or a file descriptor.Changed in version 0.19: Deprecated fchdir now covered by chdir.
chmod-
rv = chmod(what, mode);whatcan be a path, a Perl file or directory handle (see "NOTES"), or a file descriptor.Changed in version 0.19: Deprecated fchmod now covered by chmod.
chown-
rv = chown(what, uid, gid);whatcan be a path, a Perl file or directory handle (see "NOTES"), or a file descriptor.Changed in version 0.19: Deprecated fchown now covered by chown.
cimag-
im = cimag(re, im); clock-
t = clock()New in version 0.08.
clock_getcpuclockid-
clock_id = clock_getcpuclockid(pid);pid defaults to 0. Returns undef on error.
clock_getres-
(sec, nsec) = clock_getres(clock_id); floating_sec = clock_getres(clock_id);clock_id defaults to
CLOCK_REALTIME. Returns empty list or undef on error.Changed in version 0.25: Return floating seconds in scalar context.
clock_gettime-
(sec, nsec) = clock_gettime(clock_id); floating_sec = clock_gettime(clock_id);clock_id defaults to
CLOCK_REALTIME. Returns empty list or undef on error.Changed in version 0.25: Return floating seconds in scalar context.
clock_nanosleep-
(rem_sec, rem_nsec) = clock_nanosleep(clock_id, flags, floating_sec); floating_rem_sec = clock_nanosleep(clock_id, flags, floating_sec); (rem_sec, rem_nsec) = clock_nanosleep(clock_id, flags, sec, nsec); floating_rem_sec = clock_nanosleep(clock_id, flags, sec, nsec);Returns zero(es) on success, the remaining time on EINTR, the empty list or undef otherwise. The remaining time is zero if the flag
TIMER_ABSTIMEis set.Changed in version 0.25: Sleep time can be floating seconds only or seconds and nanoseconds.
clock_settime-
rv = clock_settime(clock_id, sec, nsec); rv = clock_settime(clock_id, floating_sec);Changed in version 0.25: Time can be floating seconds only or seconds and nanoseconds.
clog-
(re, im) = clog(re, im); close-
rv = close(fd); confstr-
s = confstr(name);name is one of the
_CS_*integer constants.Returns undef on error.
conj-
(re, im) = conj(re, im); copysign-
xs = copysign(x, y); cos-
y = cos(x); cosh-
y = cosh(x); cpow-
(re, im) = cpow(re_x, im_x, re_y, im_y); cproj-
(re, im) = cproj(re, im); creal-
re = creal(re, im); creat-
rv = creat(path, mode=0666);New in version 0.22.
csin-
(re, im) = csin(re, im); csinh-
(re, im) = csinh(re, im); csqrt-
(re, im) = csqrt(re, im); ctan-
(re, im) = ctan(re, im); ctanh-
(re, im) = ctanh(re, im); dirname-
name = dirname(path); div-
(quot, rem) = div(numer, denom);Calls
lldiv(),ldiv(), ordiv(), whichever is the maximum supported by your system.Note that the library functions use signed integers, so
div(~0, 1)is(-1, 0). If you don't want that, use Perlsint(),/and%.Changed in version 0.19: Deprecated ldiv and lldiv now covered by div.
dlclose-
dlclose(dlhandle); dlerror-
dlerror(); dlopen-
dlhandle = dlopen(file, mode); dlsym-
addr = dlsym(dlhandle, name); drand48-
r = drand48(); endutxent-
endutxent(); erand48-
(r, X0, X1, X2) = erand48(X0, X1, X2); erf-
y = erf(x); erfc-
y = erfc(x); execveat-
rv = execveat(dirfd, path, args, env=undef, flags=0);The
execveat()system call is a nonstandard extension present in Linux. See alsofexecve().It executes the program referred to by path, which is interpreted relative to dirfd as with the other *at functions, passing args as its command-line arguments and optionally env as its environment.
args must be an array reference and, by convention, args->[0] should be the name of the program being executed.
env must be a hash reference. If omitted or undef, the environment of the calling proces is used (which you can manipulate via
%ENV).flags is a bit mask that can include zero or more of the flags
AT_EMPTY_PATH,AT_SYMLINK_NOFOLLOW.path is executed "as is", i.e. no
PATHsearch or interpretation of shell metacharacters takes place as opposed to Perl's built-inexec.Returns undef on error, otherwise it doesn't return.
Usage example:
sysopen my $dh, '/usr', O_DIRECTORY|O_PATH; execveat($dh, 'bin/date', [qw(date +%T)], {TZ => 'UTC'}, AT_SYMLINK_NOFOLLOW);New in version 0.22.
exp-
y = exp(x); exp2-
y = exp2(x);This function may not be available in libquadmath.
expm1-
y = expm1(x); fabs-
absval = fabs(x);New in version 0.27.
faccessat-
rv = faccessat(dirfd, path, amode, flags=0);flags is the bitwise OR of zero or more of
AT_EACCESS,AT_SYMLINK_NOFOLLOW. fchmodat-
rv = fchmodat(dirfd, path, mode, flags=0);flags can be 0 or
AT_SYMLINK_NOFOLLOW. Your system might support a different set of flags. fchownat-
rv = fchownat(dirfd, path, uid, gid, flags=0);flags can be 0 or
AT_SYMLINK_NOFOLLOW. Your system might support a different set of flags. fdatasync-
rv = fdatasync(fd); fdopen-
rv = fdopen(fd, mode);Returns a file handle associated with the numeric file descriptor fd or undef on error. mode is one of the values
"r","w","a"with an optional"+"and/or"b".The file descriptor is not dup'ed and will be closed when the handle is closed.
It's similar to
IO::Handle::new_from_fd()with the following improvements:It really calls
fdopen(3).It expects POSIX mode strings (e.g.
"r", not"<").It fails if mode is not compatible with the flags of fd.
Usage example:
my $fh = do { opendir my $dh, '.'; fdopen(POSIX::dup(fileno $dh), 'r'); }; chmod 0700, $fh; # this would fail with $dh from opendirNew in version 0.05.
Changed in version 0.22: fd can no longer be a handle (that was a wrong turn).
fdopendir-
rv = fdopendir(fd);Returns a directory handle associated with the numeric file descriptor fd or undef on error.
The file descriptor is not dup'ed and will be closed when the handle is closed.
Usage example:
my $dh = do { sysopen my $fh, '/tmp', O_RDONLY|O_DIRECTORY|O_NOFOLLOW; fdopendir(POSIX::dup(fileno $fh)); }; my @dents = readdir $dh; # this would fail with $fh from sysopenNew in version 0.05.
Changed in version 0.22: fd can no longer be a handle (that was a wrong turn).
fdim-
d = fdim(double x, double y); feclearexcept-
rv = feclearexcept(excepts);Returns
0 but trueon success, undef on error.New in version 0.20.
fegetround-
rounding_mode = fegetround(); feraiseexcept-
rv = feraiseexcept(excepts);Returns
0 but trueon success, undef on error.New in version 0.20.
fesetround-
rv = fesetround(round);Returns
0 but trueon success, undef on error. fetestexcept-
excepts_currently_set = fetestexcept(excepts);New in version 0.20.
fexecve-
rv = fexecve(fd, args, env=undef);Executes the program referred to by the file descriptor fd, passing args as its command-line arguments and optionally env as its environment.
args must be an array reference and, by convention, args->[0] should be the name of the program being executed.
env must be a hash reference. If omitted or undef, the environment of the calling proces is used (which you can manipulate via
%ENV).See the manpage for issues regarding the close-on-exec flag and the /proc filesystem.
Returns undef on error, otherwise it doesn't return.
Usage example:
sysopen my $fh, '/usr/bin/date', O_PATH; fexecve($fh, [qw(date +%T)], {TZ => 'UTC'});See also
execveat().New in version 0.22.
ffs-
pos = ffs(i);Calls
ffsll(),ffsl(), orffs(), whichever is the maximum available on your system. floor-
y = floor(x); fma-
r = fma(x, y, z); fmax-
m = fmax(x, y); fmin-
m = fmin(x, y); fmod-
m = fmod(x, y); fnmatch-
rv = fnmatch(pattern, string, flags);Returns 0 if string matches pattern,
FNM_NOMATCHif there is no match, undef if there is an error.flags is the bitwise OR of zero or more of
FNM_NOESCAPE,FNM_PATHNAME,FNM_PERIOD,FNM_FILE_NAME,FNM_LEADING_DIR,FNM_CASEFOLD. fpclassify-
rv = fpclassify(x);Returns one of
FP_NAN,FP_INFINITE,FP_ZERO,FP_SUBNORMAL,FP_NORMAL. frexp-
(fraction, exponent) = frexp(x);New in version 0.27.
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);flags is the bitwise OR of zero or more of
AT_SYMLINK_NOFOLLOW,AT_NO_AUTOMOUNT. Your system might support a different set of flags.See
stat()for notes on the return values and bugs inCORE::stat().Returns the empty list on error.
fsync-
rv = fsync(fd); futimens-
rv = futimens(fd, atime_sec, atime_nsec, mtime_sec, mtime_nsec);atime_sec and mtime_sec default to 0, atime_nsec and mtime_nsec default to
UTIME_NOW. getdate-
(sec, min, hour, mday, mon, year, wday, yday, isdst) = getdate(string); getdate_err-
getdate_err()returns the value of the getdate_err variable. getegid-
egid = getegid(); getentropy-
s = getentropy(length);Returns a string of length bytes of "unpredictable high-quality random data, generated by a cryptographically secure pseudo-random number generator", or undef on error.
The maximum permitted value for length is
GETENTROPY_MAX(usually 256). If more bytes are requested,$!is set toEINVALas decreed by POSIX, even on systems that believeEIOis right.If your system does not provide
getentropy(), it is emulated viagetrandom(),arc4random_buf(),BCryptGenRandom()(Windows),RDRAND(Intel/AMD), orRNDR(ARM64) if available (picked in this order at build time).getentropy()was standardized with POSIX.1-2024.New in version 0.27.
geteuid-
euid = geteuid(); getgid-
gid = getgid(); gethostid-
hostid = gethostid(); gethostname-
hostname = gethostname(); getitimer-
(int_sec, int_usec, val_sec, val_usec) = getitimer(which);which can be one of
ITIMER_REAL,ITIMER_VIRTUAL,ITIMER_PROF.POSIX.1-2008 marks
getitimer()andsetitimer()obsolete, recommending the use of the POSIX timers API (timer_gettime(),timer_settime(), etc.) instead.POSIX.1-2024 removed
getitimer()andsetitimer(). getpriority-
prio = getpriority(which=PRIO_PROCESS, who=0);which can be one of
PRIO_PROCESS,PRIO_PGRP,PRIO_USER, defaults toPRIO_PROCESS. who defaults to 0.Returns undef on error.
getresgid-
(rgid, egid, sgid) = getresgid();Returns the empty list on error.
getresgid()was standardized with POSIX.1-2024.New in version 0.27.
getresuid-
(ruid, euid, suid) = getresuid();Returns the empty list on error.
getresuid()was standardized with POSIX.1-2024.New in version 0.27.
getsid-
sid = getsid(pid);pid defaults to 0.
getuid-
uid = getuid(); getutxent-
(user, id, line, pid, type, sec, usec) = getutxent();getutxent()reads a line from the current file position in the utmp file. getutxid-
(user, id, line, pid, type, sec, usec) = getutxid(ut_type[, ut_id]);getutxid()searches forward from the current file position in the utmp file based upon ut_type and ut_id. If ut_type is one ofRUN_LVL,BOOT_TIME,NEW_TIME, orOLD_TIME,getutxid()will find the first entry whose ut_type field matches ut_type. If ut_type is one ofINIT_PROCESS,LOGIN_PROCESS,USER_PROCESS, orDEAD_PROCESS,getutxid()will find the first entry whose ut_id field matches ut_id.Returns the empty list on error.
getutxline-
(user, id, line, pid, type, sec, usec) = getutxline(ut_line);getutxline()searches forward from the current file position in the utmp file. It scans entries whose ut_type isUSER_PROCESSorLOGIN_PROCESSand returns the first one whose ut_line field matches ut_line.Returns the empty list on error.
grantpt-
rv = grantpt(fd);New in version 0.27.
hypot-
r = hypot(x, y); ilogb-
y = ilogb(x); isalnum-
rv = isalnum(charstring);Like POSIX::isalnum() but returns 0 for the empty string.
isalpha-
rv = isalpha(charstring);Like POSIX::isalpha() but returns 0 for the empty string.
isascii-
rv = isascii(charstring);POSIX.1-2008 marks it as obsolete and it was removed in POSIX.1-2024, but I include it anyway.
New in version 0.19.
isatty-
rv = isatty(fd); isblank-
rv = isblank(charstring);Like POSIX::isblank() but returns 0 for the empty string.
iscntrl-
rv = iscntrl(charstring);Like POSIX::iscntrl() but returns 0 for the empty string.
isdigit-
rv = isdigit(charstring);Like POSIX::isdigit() but returns 0 for the empty string.
isfinite-
rv = isfinite(x); isgraph-
rv = isgraph(charstring);Like POSIX::isgraph() but returns 0 for the empty string.
isgreaterequal-
rv = isgreaterequal(x, y);New in version 0.20.
isinf-
rv = isinf(x); isless-
rv = isless(x, y);New in version 0.20.
islessequal-
rv = islessequal(x, y);New in version 0.20.
islessgreater-
rv = islessgreater(x, y);New in version 0.20.
islower-
rv = islower(charstring);Like POSIX::islower() but returns 0 for the empty string.
isnan-
rv = isnan(x); isnormal-
rv = isnormal(x); isprint-
rv = isprint(charstring);Like POSIX::isprint() but returns 0 for the empty string.
ispunct-
rv = ispunct(charstring);Like POSIX::ispunct() but returns 0 for the empty string.
isspace-
rv = isspace(charstring);Like POSIX::isspace() but returns 0 for the empty string.
isunordered-
rv = isunordered(x, y);New in version 0.20.
isupper-
rv = isupper(charstring);Like POSIX::isupper() but returns 0 for the empty string.
isxdigit-
rv = isxdigit(charstring);Like POSIX::isxdigit() but returns 0 for the empty string.
j0-
y = j0(x);j0()is the Bessel function of the first kind of order 0. j1-
y = j1(x);j1()is the Bessel function of the first kind of order 1. jn-
y = jn(n, x);jn()is the Bessel function of the first kind of order n. jrand48-
(r, X0, X1, X2) = jrand48(X0, X1, X2); killpg-
rv = killpg(pgrp, sig); l64a-
s = l64a(n); lchown-
rv = lchown(path, uid, gid);New in version 0.08.
ldexp-
y = ldexp(x, exp); lgamma-
y = lgamma(x); link-
rv = link(path1, path2); linkat-
rv = linkat(fd1, path1, fd2, path2, flags=0);flags can be 0 or
AT_SYMLINK_FOLLOW. Your system might support a different set of flags. log-
y = log(x); log10-
y = log10(x); log1p-
y = log1p(x); log2-
y = log2(x); logb-
y = logb(x);This function may not be available in libquadmath.
lrand48-
r = lrand48(); lrint-
l = lrint(x);From the countless
l*rint*()interfaces it chooses the one matching your Perl's NV type, preferring the "long long" return value variant.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.
New in verion 0.27.
lround-
l = lround(x);From the countless
l*round*()interfaces it chooses the one matching your Perl's NV type, preferring the "long long" return value variant.If the rounded value is outside Perl's internal signed integer range, it is returned as a string.
Changed in version 0.27: No longer returns undef on error.
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);pathis assumed to be a string (or will be converted to a string).See
stat()for notes on the return values and bugs inCORE::stat().Returns the empty list on error.
mkdir-
rv = mkdir(path, [mode = 0777]); mkdirat-
rv = mkdirat(fd, path, mode); mkdtemp-
name = mkdtemp(template); mkfifo-
rv = mkfifo(path, mode); mkfifoat-
rv = mkfifoat(fd, path, mode); mknod-
rv = mknod(path, mode, dev); mknodat-
rv = mknodat(fd, path, mode, dev); mkostemp-
(fd, name) = mkostemp(template, flags);flags is a bitwise OR of zero or more
open()flags. For the exact set of supported flags and their restrictions see the manpage of your system.mkostemp()was standardized with POSIX.1-2024.New in verion 0.27.
mkstemp-
(fd, name) = mkstemp(template); mrand48-
mrand48(); nanosleep-
(rem_sec, rem_nsec) = nanosleep(floating_sec); floating_rem_sec = nanosleep(floating_sec); (rem_sec, rem_nsec) = nanosleep(sec, nsec); floating_rem_sec = nanosleep(sec, nsec);Returns zero(es) on success, the remaining time on EINTR, the empty list or undef otherwise.
Changed in version 0.25: Sleep time can be floating seconds only or seconds and nanoseconds.
nearbyint-
y = nearbyint(x); nextafter-
z = nextafter(x, y); nexttoward-
z = nexttoward(x, y);This function may not be available in libquadmath.
nice-
rv = nice(incr);Returns undef on error.
nrand48-
r = nrand48() open-
rv = open(path, flags=O_RDONLY, mode=0666); openat-
rv = openat(dirfd, path, flags=O_RDONLY, mode=0666);If dirfd is numeric (i.e. a file descriptor),
openat()returns a file descriptor. If dirfd is a file or directory handle, the return value is also a handle whose type depends on the file type of path: If path is a directory, the return value is a directory handle, otherwise it's a file handle.To get a handle even for the special numeric dirfd value
AT_FDCWD, you can pass a reference to that value instead, i.e.openat(\AT_FDCWD, ...).Returns undef on error.
Changed in version 0.18: Support added for
\AT_FDCWDreference. openat2-
rv = openat2(dirfd, path, how);The
openat2()system call is a Linux-specific extension ofopenat()and provides a superset of its functionality.The how parameter is a hash reference corresponding to the struct open_how. It currently supports the keys flags, mode and resolve. Missing keys are treated as having a zero value.
Example:
my $fh = openat2( \AT_FDCWD, '/foobar', {flags => O_RDWR|O_CREAT, mode => 0600, resolve => RESOLVE_IN_ROOT} );Note that, unlike
open()oropenat(),openat2()is very picky about flags and mode. See the manpage for details.Returns undef on error.
New in version 0.18.
pathconf-
rv = pathconf(what, name);what can be a path or, if your system supports
fpathconf(), a Perl file or directory handle or a file descriptor.name is one of the
_PC_*integer constants.Returns undef on error.
New in version 0.22.
pause-
rv = pause(); poll-
rv = poll(pollfds, timeout=-1);timeout specifies the number of milliseconds that
poll()should block waiting for a file descriptor to become ready. A negative timeout value means an infinite timeout. A timeout of zero causespoll()to return immediately.pollfds is an array reference holding array references of the form [fd, events, revents] where fd is an integer file descriptor or a file handle, events is a bit mask of events you are interested in for fd, and revents is a bit mask of events that actually occurred.
revents is changed by the call (unless a timeout or error occurs), everything else remains unchanged.
If fd is negative or anything
sv_2io()doesn't consider a file handle, then the corresponding events field is ignored and the revents field returns zero.Returns the number of elements in pollfds whose revents have been set to a non-zero value, zero if the call timed out. On error,
poll()returns -1 and sets$!just likeselect().Usage example:
open my $pipe, '-|', qw(tail -f /var/log/messages); my $pollfds = [[\*STDIN, POLLIN, 0], [2, POLLOUT, 0], [$pipe, POLLIN, 0]]; my $rv = poll($pollfds, -1); # Skip events for fd 2 this time: my $pollfds = [[\*STDIN, POLLIN, 0], [-2, POLLOUT, 0], [$pipe, POLLIN, 0]]; my $rv = poll($pollfds, -1);New in version 0.25.
ppoll-
rv = ppoll(pollfds[, timeout[, sigmask]]);ppoll()is similar topoll()with the following differences:timeout can be an integer or floating point value in seconds or an array reference of the form [seconds, nanoseconds]. An omitted or undef timeout value means an infinite timeout.
sigmask must be a
POSIX::SigSet. If sigmask is omitted or undef, no signal mask is applied andppoll()behaves likepoll()with a more precise timeout.ppoll()was standardized with POSIX.1-2024.New in version 0.27.
posix_fadvise-
rv = posix_fadvise(fd, offset, len, advice);advice is one of the
POSIX_FADV_constants.New in version 0.14.
posix_fallocate-
rv = posix_fallocate(fd, offset, len);New in version 0.14.
posix_openpt-
fh = posix_openpt(flags=O_RDWR);flags is the bitwise OR of zero or more of
O_RDWR,O_NOCTTY,O_CLOEXEC,O_CLOFORK.O_CLOEXEC,O_CLOFORKwere standardized with POSIX.1-2024.New in version 0.27.
pow-
r = pow(x, y);New in version 0.27.
pread-
bytes_read = pread(fd, buf, count, offset=0, buf_offset=0);pread()reads count bytes (not characters) of data from the file descriptor fd at file offset offset into the scalar buf without changing the file offset. buf will be enlarged automatically if necessary.offset and buf_offset are set to 0 if omitted or undef.
pread()treats buf just likesysread()does: buf_offset may be specified to place the read data at that position in buf. If buf_offset is past the end of buf, buf will be padded with zeros before appending the data. If buf_offset is negative, it is counted from the end of the string. buf will be grown or shrunk so that the last byte actually read is the last byte of buf after the read.Returns the number of bytes read, 0 at EOF, undef on error.
Croaks if buf is read-only and count is non-zero.
Changed in version 0.13: Argument order is now (count, offset) instead of (offset, count).
Changed in version 0.22: Croak with read-only buf and non-zero count.
preadv-
bytes_read = preadv(fd, buffers, sizes, offset=0);preadv()behaves likereadv()but adds an optional offset argument, which specifies the file position at which the data is to be read. offset is set to 0 if omitted or undef.The file offset is not changed by this system call. The file referred to by fd must be capable of seeking.
This syscall is present in Linux and BSD.
New in version 0.13.
preadv2-
bytes_read = preadv2(fd, buffers, sizes, offset=0, flags=0);preadv2()is similar topreadv()but adds an optional flags argument, which is a bitwise OR of zero or more of theRWF_*flags (see the manpage for details). flags is set to 0 if omitted or undef.Unlike
preadv(), if the offset argument is -1, then the current file offset is used and updated.This syscall is Linux-specific.
New in version 0.20.
psignal-
psignal(sig, msg);New in version 0.25.
ptsname-
name = ptsname(fd);Changed in version 0.19: Calls
ptsname_r()if available.Changed in version 0.22: fd may also be a file handle.
pwrite-
bytes_written = pwrite(fd, buf, count=undef, offset=0, buf_offset=0);pwrite()writes count bytes of data from the scalar buf to the file descriptor fd at file offset offset without changing the file offset. The file referenced by fd must be capable of seeking.If count is omitted or undef, everything from buf_offset up to the end of buf is written.
buf_offset may be specified to write data from that position in buf. If buf_offset is negative it is counted from the end of the string.
offset and buf_offset are set to 0 if omitted or undef.
Returns the number of bytes written, undef on error.
On Linux, if a file is opened with
O_APPEND,pwrite()appends data to the end of the file, regardless of the value of offset (in violation of POSIX).Changed in version 0.13: Argument order is now (count, offset) instead of (offset, count).
pwritev-
bytes_written = pwritev(fd, buffers, offset=0);pwritev()behaves likewritev()but adds an optional offset argument, which specifies the file position at which the data is to be written. offset is set to 0 if omitted or undef.The file offset is not changed by this system call. The file referred to by fd must be capable of seeking.
On Linux, if a file is opened with
O_APPEND,pwritev()appends data to the end of the file, regardless of the value of offset (in violation of POSIX).This syscall is present in Linux and BSD.
New in version 0.08.
pwritev2-
bytes_written = pwritev2(fd, buffers, offset=0, flags=0);pwritev2()is similar topwritev()but adds an optional flags argument, which is a bitwise OR of zero or more of theRWF_*flags (see the manpage for details). flags is set to 0 if omitted or undef.Unlike
pwritev(), if the offset argument is -1, then the current file offset is used and updated.This syscall is Linux-specific.
New in version 0.20.
random-
r = random(); raise-
rv = raise(sig); read-
bytes_read = read(fd, buf, count);Like
POSIX::read()but returns 0 at EOF instead of0 but true. Croaks if buf is read-only and count is non-zero.Changed in version 0.22: Croak with read-only buf and non-zero count.
readv-
bytes_read = readv(fd, buffers, sizes);readv()reads from the file descriptor fd into buffers as many strings as there are elements in sizes.buffers must be a variable holding an array (
@buf), an array reference or undef ($buf). If it is undef it will be upgraded to an array reference.sizes must be an array reference, i.e.
\@sizes,$sizes, or[...].sizes 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. sizes is processed in array order.
buffers will be extended if necessary, but it will never be shrunk. If buffers is not empty, any existing elements are replaced as long as sufficient data was read from fd.
readv()returns the number of bytes read, undef on error.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.
Usage example:
my $fh = openat(\AT_FDCWD, '/tmp/foobar', O_RDWR|O_CREAT|O_TRUNC); pwrite($fh, 'foobar', 6, 0); readv($fh, my $buf1, [3, 0, 8]); # $buf1: ['foo', '', 'bar'] sysseek $fh, 0, 0; readv($fh, my @buf2, [1, 3, 2]); # @buf2: ('f', 'oob', 'ar')New in version 0.13.
Changed in version 0.22: buffers may be an undef variable, buffers beyond EOF are created as empty strings instead of being skipped.
readlink-
name = readlink(path);Returns undef on error.
readlinkat-
name = readlinkat(dirfd, path);Returns undef on error.
realpath-
resolved_path = realpath(path);Calls the actual C library fuction
realpath()and relies on it to be able to allocate memory for the resolved path automatically (as required by POSIX-2008).Returns undef on error.
New in version 0.18.
remainder-
rem = remainder(x, y);Changed in version 0.27: No longer returns undef on error.
remove-
rv = remove(path);Calls the actual C library function
remove().Note that core
POSIX::remove()fails if path 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(-d $_[0]) ? CORE::rmdir($_[0]) : CORE::unlink($_[0]). Quote from Armageddon.This could be fixed like this:
unlink $_[0] or ($!{EISDIR} or $!{EPERM}) and rmdir $_[0](correct errno check depends on OS), or by using the library call right away. removeat-
rv = removeat(dirfd, path);The
removeat()function works exactly likeremove()but path is interpreted relative to dirfd as with the other *at functions.This function is a home-grown non-standard extension only available in this module (to my knowledge).
New in version 0.22.
remquo-
(rem, quo) = remquo(x, y);New in version 0.20.
Changed in version 0.27: No longer returns the empty list on error.
rename-
rv = rename(old, new); renameat-
rv = renameat(olddirfd, oldpath, newdirfd, newpath); renameat2-
rv = renameat(olddirfd, oldpath, newdirfd, newpath, flags=0);The
renameat2()system call is a Linux-specific extension ofrenameat()and provides a superset of its functionality.flags is the bitwise OR of zero or more of
RENAME_EXCHANGE,RENAME_NOREPLACE,RENAME_WHITEOUT.New in version 0.21.
rint-
r = rint(x);New in version 0.27.
rmdir-
rv = rmdir(path);New in version 0.19.
round-
r = round(x); scalbn-
y = scalbn(x, exp);From the countless
scalb*n*()interfaces it chooses the one matching your Perl's NV type, preferring the long int exp variant. seed48-
(old_seed1, old_seed2, old_seed3) = seed48(seed1, seed2, seed3); setegid-
rv = setegid(gid); seteuid-
rv = seteuid(uid); setgid-
rv = setgid(gid); setitimer-
(old_int_sec, old_int_usec, old_val_sec, old_val_usec) = setitimer(which, int_sec, int_usec, val_sec, val_usec);which is one of
ITIMER_REAL,ITIMER_VIRTUAL,ITIMER_PROF.POSIX.1-2008 marks
getitimer()andsetitimer()obsolete, recommending the use of the POSIX timers API (timer_gettime(),timer_settime(), etc.) instead.POSIX.1-2024 removed
getitimer()andsetitimer(). setpriority-
rv = setpriority(prio, which=PRIO_PROCESS, who=0);which can be one of
PRIO_PROCESS,PRIO_PGRP,PRIO_USER, defaults toPRIO_PROCESS. who defaults to 0.Note that due to the support of default values for which and who, prio is the first call parameter, whereas in the actual syscall it is the last.
Returns true on success, undef on error.
setregid-
rv = setregid(rgid, egid); setresgid-
rv = setresgid(rgid, egid, sgid);setresgid()was standardized with POSIX.1-2024.New in version 0.27.
setresuid-
rv = setresuid(ruid, euid, suid);setresuid()was standardized with POSIX.1-2024.New in version 0.27.
setreuid-
rv = setreuid(ruid, euid); setsid-
sid = setsid();New in version 0.19.
setuid-
rv = setuid(uid); setutxent-
setutxent(); sighold-
rv = sighold(sig);POSIX.1-2008 marks this function as obsolete, recommending the use of "sigprocmask" in POSIX instead.
sigignore-
rv = sigignore(sig);POSIX.1-2008 marks this function as obsolete, recommending the use of "sigaction" in POSIX instead. Or use
$SIG{SIG} = 'IGNORE';. signbit-
b = signbit(x); sigpause-
sigpause(sig);POSIX.1-2008 marks this function as obsolete, recommending the use of "sigsuspend" in POSIX instead.
sigrelse-
rv = sigrelse(sig);POSIX.1-2008 marks this function as obsolete, recommending the use of "sigprocmask" in POSIX instead.
sin-
y = sin(x);New in version 0.19.
sinh-
y = sinh(x); sqrt-
y = sqrt(x); srand48-
srand48(seedval); srandom-
srandom(seed); 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);what can be a path, a Perl file handle or a file descriptor.
ctim_sec, blksize, blocks 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
eqinstead of==for comparisons.Note that
CORE::stat()lies to you in some cases: It returns rdev as a signed integer even if your OS'sdev_tis unsigned. It returns size as a floating point number if your OS'soff_tis bigger than Perl's integer size. It returns the times as floating point numbers if your OS'stime_tis unsigned.POSIX::2008::stat()doesn't mimic these bugs and uses the correct data types for all values.Returns the empty list on error.
statvfs-
(f_bsize, f_frsize, f_blocks, f_bfree, f_bavail, f_files, f_ffree, f_favail, f_fsid, f_flag, f_namemax) = statvfs(what);what can be a path, a Perl file handle or a file descriptor.
Values outside Perl's internal integer range are returned as strings as with
stat(). Note that Filesys::Statvfs returns only floating point numbers which may give wrong results, and it lacks f_fsid.Only the ST_NOSUID and ST_RDONLY flags of the f_flag field are specified in POSIX but this module provides additional ST_ flags if available.
Returns the empty list on error.
New in version 0.25.
strptime-
(sec, min, hour, mday, mon, year, wday, yday, isdst, gmtoff, zone) = strptime(s, format[, sec, min, hour, mday, mon, year, wday, yday, isdst, gmtoff, zone]); ... = strptime(s, format, \@tm);strptime()converts the string s into a broken-down time according to the format string format.The time fields may optionally be initialized in whole or in part either with up to 11 separate arguments or with a single array reference after the format. Omitted arguments are treated as undef. In case of an array reference the array is updated according to the fields affected by the format string. If an error occurred the array is not udpated.
In list context returns the broken-down time or the empty list on error. Fields not affected by the format string are returned as initialized (but see glibc notes below).
In scalar context returns the index of the first byte in s that was not processed or the byte length of s if the whole string was consumed or undef on error.
As
strptime()acts on null-terminated strings, strings containing NUL bytes will only be processed up to the first NUL byte.gmtoff and zone were standardized with POSIX.1-2024. They might not be supported by your system, and zone might be ignored entirely.
glibc "recomputes" wday and yday if any of the year, month, or day elements changed, so they might be meaningless unless you specified a complete date.
New in version 0.02.
Changed in version 0.24: Accept an array reference as the third argument (RT#66519).
Changed in version 0.27: Support gmtoff and zone.
strsignal-
str = strsignal(sig);New in version 0.25.
symlink-
rv = symlink(target, linkpath); symlinkat-
rv = symlinkat(target, dirfd, linkpath); sync-
sync();This function doesn't return any value.
sysconf-
rv = sysconf(name);name is one of the
_SC_*integer constants.Returns undef on error.
New in version 0.22.
tan-
y = tan(x); tanh-
y = tanh(x); tgamma-
y = tgamma(x); timer_create-
timerid = timer_create(clockid, signal=undef);Creates a new per-process interval timer using the clock given by clock_id as the timing base. signal is the signal number to be delivered when the timer expires. If signal is omitted or undef, no signal is delivered and the progress of the timer can be monitored using
timer_gettime().Calling a notification function on timer expiration is currently not supported.
Returns undef on error.
New in version 0.16.
Changed in version 0.22: signal is optional.
timer_delete-
rv = timer_delete(timerid);Returns
0 but trueon success, undef on error.New in version 0.16.
timer_getoverrun-
count = timer_getoverrun(timerid);Returns undef on error.
New in version 0.16.
timer_gettime-
(interval_sec, interval_nsec, initial_sec, initial_nsec) = timer_gettime(timerid);Returns the empty list on error.
New in version 0.16.
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]);flags may be 0 or
TIMER_ABSTIME. If the init values are omitted, they are set to the int values.New in version 0.16.
truncate-
rv = truncate(what, length);what can be a path, a Perl file handle, or a file descriptor.
Note that it does not flush the file handle before truncating. Perl's built-in truncate() does (this is undocumented, probably because it's silly).
Changed in version 0.19: Deprecated ftruncate now covered by truncate.
trunc-
y = trunc(x); ttyname-
name = ttyname(fd);Calls
ttyname_r()if available.New in version 0.19.
Changed in version 0.22: fd may also be a file handle.
unlink-
rv = unlink(path);Calls the actual C library function
unlink().Note that core
POSIX::unlink()callsCORE::unlink(), which, unless you start Perl with-U, a) is prone to time-of-check/time-of-use race conditions due to an additional lstat(), and b) blindly fails withEISDIRfor directories (due to said lstat()), ignoring that some OSes useEPERMin this case (as required by POSIX). unlinkat-
rv = unlinkat(dirfd, path, flags=0);flags can be 0 or
AT_REMOVEDIR. unlockpt-
rv = unlockpt(fd);New in version 0.27.
utimensat-
rv = utimensat(dirfd, path, flags, atime_sec, atime_nsec, mtime_sec, mtime_nsec);flags can be 0 or
AT_SYMLINK_NOFOLLOW, defaults to 0. Your system might support a different set of flags.atime_sec and mtime_sec default to 0. atime_nsec and mtime_nsec default to
UTIME_NOW. write-
bytes_written = write(fd, buf, count=undef);Like
POSIX::write()but returns 0 instead of0 but trueif 0 bytes were written, and never writes more bytes than buf contains even if count exceeds the length of buf.If count is omitted or undef, it defaults to the length of buf.
writev-
bytes_written = writev(fd, buffers);writev()writes multiple buffers of data to the file associated with the file descriptor fd.buffers must be an array reference, i.e.
\@buf,$bufor[...]. The buffers are processed in array order.Each buffer can be simple scalar (usually a string) or an array reference of the form
[scalar, offset, length]to write length bytes of scalar from position offset. A negative offset counts from the end of scalar. If omitted, offset defaults to 0, length defaults to the string length of scalar starting at offset. An offset beyond either end of scalar causes the call to croak. length is capped so that it doesn't exceed the end of scalar.Note that
writev($fh, $buf);is not the same asprint $fh, @$buf;orsyswrite $fh, $_ for @$buf;becausewritev()transfers data atomically as a single block. See the manpage for details.Returns the number of bytes written or undef on error.
New in version 0.08.
Changed in version 0.27: Buffers may be array references.
y0-
y = y0(x);y0()is the Bessel function of the second kind of order 0. y1-
y = y1(x);y1()is the Bessel function of the second kind of order 1. yn-
y = yn(n, x);yn()is the Bessel function of the second kind of order n.
EXPORTS
This module does not export anything by default. The following export tags are available:
: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 and TIMER_ABSTIME
:errno errno 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
:poll poll(), ppoll() and all POLL constants
:socket_h All constants from L<sys/socket.h|https://pubs.opengroup.org/onlinepubs/9799919799/basedefs/sys_socket.h.html>
: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 L<utmpx.h|https://pubs.opengroup.org/onlinepubs/9799919799/basedefs/utmpx.h.html> constants
:confstr confstr() and all _CS_ constants
:pathconf pathconf() and all _PC_ constants
:sysconf sysconf() and all _SC_ constants
New in version 0.19: :stat_h export tag.
New in version 0.20: :fenv_h export tag.
New in version 0.22: :confstr, :pathconf, :sysconf export tags.
New in version 0.25: :poll export tag.
New in version 0.24: :socket_h export tag.
CONSTANTS
AF_INET AF_INET6 AF_UNIX AF_UNSPEC
AT_EACCESS AT_EMPTY_PATH AT_FDCWD AT_NO_AUTOMOUNT AT_REMOVEDIR AT_RESOLVE_BENEATH AT_SYMLINK_FOLLOW AT_SYMLINK_NOFOLLOW
BOOT_TIME NEW_TIME OLD_TIME RUN_LVL DEAD_PROCESS INIT_PROCESS LOGIN_PROCESS USER_PROCESS ACCOUNTING EMPTY UT_UNKNOWN
CLOCK_BOOTTIME CLOCK_BOOTTIME_ALARM CLOCK_HIGHRES CLOCK_MONOTONIC CLOCK_MONOTONIC_COARSE CLOCK_MONOTONIC_FAST CLOCK_MONOTONIC_PRECISE CLOCK_MONOTONIC_RAW CLOCK_PROCESS_CPUTIME_ID CLOCK_REALTIME CLOCK_REALTIME_ALARM CLOCK_REALTIME_COARSE CLOCK_REALTIME_FAST CLOCK_REALTIME_PRECISE CLOCK_SOFTTIME CLOCK_TAI CLOCK_THREAD_CPUTIME_ID CLOCK_UPTIME CLOCK_UPTIME_FAST CLOCK_UPTIME_PRECISE
E2BIG EACCES EADDRINUSE EADDRNOTAVAIL EAFNOSUPPORT EAGAIN EALREADY EBADF EBADMSG EBUSY ECANCELED ECHILD ECONNABORTED ECONNREFUSED ECONNRESET EDEADLK EDESTADDRREQ EDOM EDQUOT EEXIST EFAULT EFBIG EHOSTUNREACH EIDRM EILSEQ EINPROGRESS EINTR EINVAL EIO EISCONN EISDIR ELOOP EMFILE EMLINK EMSGSIZE EMULTIHOP ENAMETOOLONG ENETDOWN ENETRESET ENETUNREACH ENFILE ENOBUFS ENODEV ENOENT ENOEXEC ENOLCK ENOLINK ENOMEM ENOMSG ENOPROTOOPT ENOSPC ENOSYS ENOTCONN ENOTDIR ENOTEMPTY ENOTRECOVERABLE ENOTSOCK ENOTSUP ENOTTY ENXIO EOPNOTSUPP EOVERFLOW EOWNERDEAD EPERM EPIPE EPROTO EPROTONOSUPPORT EPROTOTYPE ERANGE EROFS ESOCKTNOSUPPORT ESPIPE ESRCH ESTALE ETIMEDOUT ETXTBSY EWOULDBLOCK EXDEV
F_DUPFD F_DUPFD_CLOEXEC F_DUPFD_CLOFORK F_GETFD F_SETFD F_GETFL F_SETFL F_GETLK F_SETLK F_SETLKW F_OFD_GETLK F_OFD_SETLK F_OFD_SETLKW F_GETOWN F_GETOWN_EX F_SETOWN F_SETOWN_EX F_RDLCK F_UNLCK F_WRLCK FD_CLOEXEC FD_CLOFORK F_OWNER_PID F_OWNER_PGRP
FE_TONEAREST FE_TOWARDZERO FE_UPWARD FE_DOWNWARD FE_DIVBYZERO FE_INEXACT FE_INVALID FE_OVERFLOW FE_UNDERFLOW FE_ALL_EXCEPT
FNM_CASEFOLD FNM_FILE_NAME FNM_IGNORECASE FNM_LEADING_DIR FNM_NOESCAPE FNM_NOMATCH FNM_PATHNAME FNM_PERIOD
FLT_EVAL_METHOD FLT_RADIX FP_INFINITE FP_NAN FP_NORMAL FP_SUBNORMAL FP_ZERO FP_FAST_FMA FP_FAST_FMAF FP_FAST_FMAL FP_ILOGB0 FP_ILOGBNAN MATH_ERRNO MATH_ERREXCEPT
GETENTROPY_MAX NSIG_MAX NZERO
HUGE_VAL INFINITY
ITIMER_PROF ITIMER_REAL ITIMER_VIRTUAL
MSG_CMSG_CLOEXEC MSG_CMSG_CLOFORK MSG_CTRUNC MSG_DONTROUTE MSG_EOR MSG_NOSIGNAL MSG_OOB MSG_PEEK MSG_TRUNC MSG_WAITALL
O_ACCMODE O_APPEND O_ASYNC O_CLOEXEC O_CLOFORK O_CREAT O_DIRECT O_DIRECTORY O_DSYNC O_EMPTY_PATH O_EXEC O_EXCL O_EXLOCK O_LARGEFILE O_NDELAY O_NOATIME O_NOCTTY O_NOFOLLOW O_NONBLOCK O_NOSIGPIPE O_PATH O_RDONLY O_RDWR O_RESOLVE_BENEATH O_REGULAR O_RSYNC O_SEARCH O_SHLOCK O_SYNC O_TMPFILE O_TRUNC O_TTY_INIT O_WRONLY FASYNC
POSIX_FADV_NORMAL POSIX_FADV_SEQUENTIAL POSIX_FADV_RANDOM POSIX_FADV_NOREUSE POSIX_FADV_WILLNEED POSIX_FADV_DONTNEED
PRIO_PROCESS PRIO_PGRP PRIO_USER
RENAME_EXCHANGE RENAME_NOREPLACE RENAME_WHITEOUT RESOLVE_BENEATH RESOLVE_IN_ROOT RESOLVE_NO_MAGICLINKS RESOLVE_NO_SYMLINKS RESOLVE_NO_XDEV RESOLVE_CACHED
RTLD_DEEPBIND RTLD_GLOBAL RTLD_LAZY RTLD_LOCAL RTLD_MEMBER RTLD_NOAUTODEFER RTLD_NODELETE RTLD_NOLOAD RTLD_NOW
RWF_APPEND RWF_ATOMIC RWF_DONTCACHE RWF_DSYNC RWF_HIPRI RWF_NOAPPEND RWF_NOSIGNAL RWF_NOWAIT RWF_SUPPORTED RWF_SYNC
S_IFMT S_IFBLK S_IFCHR S_IFIFO S_IFREG S_IFDIR S_IFLNK S_IFSOCK S_ISUID S_ISGID S_IRWXU S_IRUSR S_IWUSR S_IXUSR S_IRWXG S_IRGRP S_IWGRP S_IXGRP S_IRWXO S_IROTH S_IWOTH S_IXOTH S_ISVTX
SCM_RIGHTS
SEEK_SET SEEK_CUR SEEK_END SEEK_DATA SEEK_HOLE
SHUT_RD SHUT_RDWR SHUT_WR
SOCK_DGRAM SOCK_RAW SOCK_SEQPACKET SOCK_STREAM SOCK_NONBLOCK SOCK_CLOEXEC SOCK_CLOFORK
SOL_SOCKET SOMAXCONN
SO_ACCEPTCONN SO_BROADCAST SO_DEBUG SO_DOMAIN SO_DONTROUTE SO_ERROR SO_KEEPALIVE SO_LINGER SO_OOBINLINE SO_PROTOCOL SO_RCVBUF SO_RCVLOWAT SO_RCVTIMEO SO_REUSEADDR SO_SNDBUF SO_SNDLOWAT SO_SNDTIMEO SO_TYPE
TIMER_ABSTIME UTIME_NOW UTIME_OMIT
F_OK R_OK W_OK X_OK
INFTIM POLLERR POLLFREE POLLHUP POLLIN POLLINIGNEOF POLLMSG POLLNORM POLLNVAL POLLOUT POLLPRI POLLRDBAND POLLRDHUP POLLRDNORM POLLREMOVE POLLSTANDARD POLLWRBAND POLLWRNORM POLL_BUSY_LOOP
ST_NOSUID ST_RDONLY
ST_MANDLOCK ST_NOATIME ST_NODEV ST_NODIRATIME ST_NOEXEC ST_RELATIME ST_SYNCHRONOUS
ST_ASYNC ST_DEFEXPORTED ST_EXKERB ST_EXNORESPORT ST_EXPORTANON ST_EXPORTED ST_EXPUBLIC ST_EXRDONLY ST_LOCAL ST_LOG ST_NOCOREDUMP ST_NODEVMTIME ST_QUOTA ST_ROOTFS ST_SYMPERM ST_UNION
FILESIZEBITS LINK_MAX MAX_CANON MAX_INPUT NAME_MAX PATH_MAX PIPE_BUF POSIX2_SYMLINKS POSIX_ALLOC_SIZE_MIN POSIX_REC_INCR_XFER_SIZE POSIX_REC_MAX_XFER_SIZE POSIX_REC_MIN_XFER_SIZE POSIX_REC_XFER_ALIGN SYMLINK_MAX TEXTDOMAIN_MAX
AIO_LISTIO_MAX AIO_MAX AIO_PRIO_DELTA_MAX ARG_MAX ATEXIT_MAX BC_BASE_MAX BC_DIM_MAX BC_SCALE_MAX BC_STRING_MAX CHILD_MAX COLL_WEIGHTS_MAX DELAYTIMER_MAX EXPR_NEST_MAX HOST_NAME_MAX IOV_MAX LINE_MAX LOGIN_NAME_MAX MQ_OPEN_MAX MQ_PRIO_MAX NGROUPS_MAX OPEN_MAX PAGESIZE PAGE_SIZE PTHREAD_DESTRUCTOR_ITERATIONS PTHREAD_KEYS_MAX PTHREAD_THREADS_MAX RE_DUP_MAX RTSIG_MAX SEM_NSEMS_MAX SEM_VALUE_MAX SIGQUEUE_MAX STREAM_MAX SYMLOOP_MAX TIMER_MAX TTY_NAME_MAX TZNAME_MAX
CHAR_BIT CHAR_MAX UCHAR_MAX SCHAR_MAX CHAR_MIN SCHAR_MIN INT_MAX INT_MIN LLONG_MAX LLONG_MIN LONG_BIT LONG_MAX LONG_MIN MB_LEN_MAX SHRT_MAX SHRT_MIN SSIZE_MAX UINT_MAX ULLONG_MAX ULONG_MAX USHRT_MAX WORD_BIT
_POSIX_ASYNC_IO _POSIX_CHOWN_RESTRICTED _POSIX_CPUTIME _POSIX_FALLOC _POSIX_NO_TRUNC _POSIX_PRIO_IO _POSIX_SYNC_IO _POSIX_THREAD_CPUTIME _POSIX_TIMESTAMP_RESOLUTION _POSIX_VDISABLE
_POSIX_ADVISORY_INFO _POSIX_ASYNCHRONOUS_IO _POSIX_BARRIERS _POSIX_CLOCK_SELECTION _POSIX_DEVICE_CONTROL _POSIX_FSYNC _POSIX_IPV6 _POSIX_JOB_CONTROL _POSIX_MAPPED_FILES _POSIX_MEMLOCK _POSIX_MEMLOCK_RANGE _POSIX_MEMORY_PROTECTION _POSIX_MESSAGE_PASSING _POSIX_MONOTONIC_CLOCK _POSIX_PRIORITIZED_IO _POSIX_PRIORITY_SCHEDULING _POSIX_RAW_SOCKETS _POSIX_READER_WRITER_LOCKS _POSIX_REALTIME_SIGNALS _POSIX_REGEXP _POSIX_SAVED_IDS _POSIX_SEMAPHORES _POSIX_SHARED_MEMORY_OBJECTS _POSIX_SHELL _POSIX_SPAWN _POSIX_SPIN_LOCKS _POSIX_SPORADIC_SERVER _POSIX_SS_REPL_MAX _POSIX_SYNCHRONIZED_IO _POSIX_THREADS _POSIX_THREAD_ATTR_STACKADDR _POSIX_THREAD_ATTR_STACKSIZE _POSIX_THREAD_PRIORITY_SCHEDULING _POSIX_THREAD_PRIO_INHERIT _POSIX_THREAD_PRIO_PROTECT _POSIX_THREAD_PROCESS_SHARED _POSIX_THREAD_ROBUST_PRIO_INHERIT _POSIX_THREAD_ROBUST_PRIO_PROTECT _POSIX_THREAD_SAFE_FUNCTIONS _POSIX_THREAD_SPORADIC_SERVER _POSIX_TIMEOUTS _POSIX_TIMERS _POSIX_TRACE _POSIX_TRACE_EVENT_FILTER _POSIX_TRACE_EVENT_NAME_MAX _POSIX_TRACE_INHERIT _POSIX_TRACE_LOG _POSIX_TRACE_NAME_MAX _POSIX_TRACE_SYS_MAX _POSIX_TRACE_USER_EVENT_MAX _POSIX_TYPED_MEMORY_OBJECTS _POSIX_V6_ILP32_OFF32 _POSIX_V6_ILP32_OFFBIG _POSIX_V6_LP64_OFF64 _POSIX_V6_LPBIG_OFFBIG _POSIX_V7_ILP32_OFF32 _POSIX_V7_ILP32_OFFBIG _POSIX_V7_LP64_OFF64 _POSIX_V7_LPBIG_OFFBIG _POSIX_V8_ILP32_OFF32 _POSIX_V8_ILP32_OFFBIG _POSIX_V8_LP64_OFF64 _POSIX_V8_LPBIG_OFFBIG _POSIX_VERSION
_CS_GNU_LIBC_VERSION _CS_GNU_LIBPTHREAD_VERSION _CS_LFS64_CFLAGS _CS_LFS64_LDFLAGS _CS_LFS64_LIBS _CS_LFS64_LINTFLAGS _CS_LFS_CFLAGS _CS_LFS_LDFLAGS _CS_LFS_LIBS _CS_LFS_LINTFLAGS
_CS_PATH
_CS_POSIX_V8_ILP32_OFF32_CFLAGS _CS_POSIX_V8_ILP32_OFF32_LDFLAGS _CS_POSIX_V8_ILP32_OFF32_LIBS _CS_POSIX_V8_ILP32_OFFBIG_CFLAGS _CS_POSIX_V8_ILP32_OFFBIG_LDFLAGS _CS_POSIX_V8_ILP32_OFFBIG_LIBS _CS_POSIX_V8_LP64_OFF64_CFLAGS _CS_POSIX_V8_LP64_OFF64_LDFLAGS _CS_POSIX_V8_LP64_OFF64_LIBS _CS_POSIX_V8_LPBIG_OFFBIG_CFLAGS _CS_POSIX_V8_LPBIG_OFFBIG_LDFLAGS _CS_POSIX_V8_LPBIG_OFFBIG_LIBS _CS_POSIX_V8_THREADS_CFLAGS _CS_POSIX_V8_THREADS_LDFLAGS _CS_POSIX_V8_WIDTH_RESTRICTED_ENVS _CS_V8_ENV
_CS_POSIX_V7_ILP32_OFF32_CFLAGS _CS_POSIX_V7_ILP32_OFF32_LDFLAGS _CS_POSIX_V7_ILP32_OFF32_LIBS _CS_POSIX_V7_ILP32_OFF32_LINTFLAGS _CS_POSIX_V7_ILP32_OFFBIG_CFLAGS _CS_POSIX_V7_ILP32_OFFBIG_LDFLAGS _CS_POSIX_V7_ILP32_OFFBIG_LIBS _CS_POSIX_V7_ILP32_OFFBIG_LINTFLAGS _CS_POSIX_V7_LP64_OFF64_CFLAGS _CS_POSIX_V7_LP64_OFF64_LDFLAGS _CS_POSIX_V7_LP64_OFF64_LIBS _CS_POSIX_V7_LP64_OFF64_LINTFLAGS _CS_POSIX_V7_LPBIG_OFFBIG_CFLAGS _CS_POSIX_V7_LPBIG_OFFBIG_LDFLAGS _CS_POSIX_V7_LPBIG_OFFBIG_LIBS _CS_POSIX_V7_LPBIG_OFFBIG_LINTFLAGS _CS_POSIX_V7_WIDTH_RESTRICTED_ENVS _CS_V7_ENV _CS_V7_WIDTH_RESTRICTED_ENVS
_CS_POSIX_V6_ILP32_OFF32_CFLAGS _CS_POSIX_V6_ILP32_OFF32_LDFLAGS _CS_POSIX_V6_ILP32_OFF32_LIBS _CS_POSIX_V6_ILP32_OFF32_LINTFLAGS _CS_POSIX_V6_ILP32_OFFBIG_CFLAGS _CS_POSIX_V6_ILP32_OFFBIG_LDFLAGS _CS_POSIX_V6_ILP32_OFFBIG_LIBS _CS_POSIX_V6_ILP32_OFFBIG_LINTFLAGS _CS_POSIX_V6_LP64_OFF64_CFLAGS _CS_POSIX_V6_LP64_OFF64_LDFLAGS _CS_POSIX_V6_LP64_OFF64_LIBS _CS_POSIX_V6_LP64_OFF64_LINTFLAGS _CS_POSIX_V6_LPBIG_OFFBIG_CFLAGS _CS_POSIX_V6_LPBIG_OFFBIG_LDFLAGS _CS_POSIX_V6_LPBIG_OFFBIG_LIBS _CS_POSIX_V6_LPBIG_OFFBIG_LINTFLAGS _CS_POSIX_V6_WIDTH_RESTRICTED_ENVS _CS_V6_ENV _CS_V6_WIDTH_RESTRICTED_ENVS
_CS_POSIX_V5_WIDTH_RESTRICTED_ENVS _CS_V5_WIDTH_RESTRICTED_ENVS
_CS_XBS5_ILP32_OFF32_CFLAGS _CS_XBS5_ILP32_OFF32_LDFLAGS _CS_XBS5_ILP32_OFF32_LIBS _CS_XBS5_ILP32_OFF32_LINTFLAGS _CS_XBS5_ILP32_OFFBIG_CFLAGS _CS_XBS5_ILP32_OFFBIG_LDFLAGS _CS_XBS5_ILP32_OFFBIG_LIBS _CS_XBS5_ILP32_OFFBIG_LINTFLAGS _CS_XBS5_LP64_OFF64_CFLAGS _CS_XBS5_LP64_OFF64_LDFLAGS _CS_XBS5_LP64_OFF64_LIBS _CS_XBS5_LP64_OFF64_LINTFLAGS _CS_XBS5_LPBIG_OFFBIG_CFLAGS _CS_XBS5_LPBIG_OFFBIG_LDFLAGS _CS_XBS5_LPBIG_OFFBIG_LIBS _CS_XBS5_LPBIG_OFFBIG_LINTFLAGS
_PC_2_SYMLINKS _PC_ALLOC_SIZE_MIN _PC_ASYNC_IO _PC_CHOWN_RESTRICTED _PC_FALLOC _PC_FILESIZEBITS _PC_LINK_MAX _PC_MAX_CANON _PC_MAX_INPUT _PC_NAME_MAX _PC_NO_TRUNC _PC_PATH_MAX _PC_PIPE_BUF _PC_PRIO_IO _PC_REC_INCR_XFER_SIZE _PC_REC_MAX_XFER_SIZE _PC_REC_MIN_XFER_SIZE _PC_REC_XFER_ALIGN _PC_SOCK_MAXBUF _PC_SYMLINK_MAX _PC_SYNC_IO _PC_TEXTDOMAIN_MAX _PC_TIMESTAMP_RESOLUTION _PC_VDISABLE
_SC_2_CHAR_TERM _SC_2_C_BIND _SC_2_C_DEV _SC_2_C_VERSION _SC_2_FORT_DEV _SC_2_FORT_RUN _SC_2_LOCALEDEF _SC_2_PBS _SC_2_PBS_ACCOUNTING _SC_2_PBS_CHECKPOINT _SC_2_PBS_LOCATE _SC_2_PBS_MESSAGE _SC_2_PBS_TRACK _SC_2_SW_DEV _SC_2_UPE _SC_2_VERSION _SC_ADVISORY_INFO _SC_AIO_LISTIO_MAX _SC_AIO_MAX _SC_AIO_PRIO_DELTA_MAX _SC_ARG_MAX _SC_ASYNCHRONOUS_IO _SC_ATEXIT_MAX _SC_AVPHYS_PAGES _SC_BARRIERS _SC_BASE _SC_BC_BASE_MAX _SC_BC_DIM_MAX _SC_BC_SCALE_MAX _SC_BC_STRING_MAX _SC_CHARCLASS_NAME_MAX _SC_CHAR_BIT _SC_CHAR_MAX _SC_CHAR_MIN _SC_CHILD_MAX _SC_CLK_TCK _SC_CLOCK_SELECTION _SC_COLL_WEIGHTS_MAX _SC_CPUTIME _SC_C_LANG_SUPPORT _SC_C_LANG_SUPPORT_R _SC_DELAYTIMER_MAX _SC_DEVICE_CONTROL _SC_DEVICE_IO _SC_DEVICE_SPECIFIC _SC_DEVICE_SPECIFIC_R _SC_EQUIV_CLASS_MAX _SC_EXPR_NEST_MAX _SC_FD_MGMT _SC_FIFO _SC_FILE_ATTRIBUTES _SC_FILE_LOCKING _SC_FILE_SYSTEM _SC_FSYNC _SC_GETGR_R_SIZE_MAX _SC_GETPW_R_SIZE_MAX _SC_HOST_NAME_MAX _SC_INT_MAX _SC_INT_MIN _SC_IOV_MAX _SC_IPV6 _SC_JOB_CONTROL _SC_LEVEL1_DCACHE_ASSOC _SC_LEVEL1_DCACHE_LINESIZE _SC_LEVEL1_DCACHE_SIZE _SC_LEVEL1_ICACHE_ASSOC _SC_LEVEL1_ICACHE_LINESIZE _SC_LEVEL1_ICACHE_SIZE _SC_LEVEL2_CACHE_ASSOC _SC_LEVEL2_CACHE_LINESIZE _SC_LEVEL2_CACHE_SIZE _SC_LEVEL3_CACHE_ASSOC _SC_LEVEL3_CACHE_LINESIZE _SC_LEVEL3_CACHE_SIZE _SC_LEVEL4_CACHE_ASSOC _SC_LEVEL4_CACHE_LINESIZE _SC_LEVEL4_CACHE_SIZE _SC_LINE_MAX _SC_LOGIN_NAME_MAX _SC_LONG_BIT _SC_MAPPED_FILES _SC_MB_LEN_MAX _SC_MEMLOCK _SC_MEMLOCK_RANGE _SC_MEMORY_PROTECTION _SC_MESSAGE_PASSING _SC_MINSIGSTKSZ _SC_MONOTONIC_CLOCK _SC_MQ_OPEN_MAX _SC_MQ_PRIO_MAX _SC_MULTI_PROCESS _SC_NETWORKING _SC_NGROUPS_MAX _SC_NL_ARGMAX _SC_NL_LANGMAX _SC_NL_MSGMAX _SC_NL_NMAX _SC_NL_SETMAX _SC_NL_TEXTMAX _SC_NPROCESSORS_CONF _SC_NPROCESSORS_ONLN _SC_NSIG _SC_NZERO _SC_OPEN_MAX _SC_PAGESIZE _SC_PAGE_SIZE _SC_PASS_MAX _SC_PHYS_PAGES _SC_PII _SC_PII_INTERNET _SC_PII_INTERNET_DGRAM _SC_PII_INTERNET_STREAM _SC_PII_OSI _SC_PII_OSI_CLTS _SC_PII_OSI_COTS _SC_PII_OSI_M _SC_PII_SOCKET _SC_PII_XTI _SC_PIPE _SC_POLL _SC_PRIORITIZED_IO _SC_PRIORITY_SCHEDULING _SC_RAW_SOCKETS _SC_READER_WRITER_LOCKS _SC_REALTIME_SIGNALS _SC_REGEXP _SC_REGEX_VERSION _SC_RE_DUP_MAX _SC_RTSIG_MAX _SC_SAVED_IDS _SC_SCHAR_MAX _SC_SCHAR_MIN _SC_SELECT _SC_SEMAPHORES _SC_SEM_NSEMS_MAX _SC_SEM_VALUE_MAX _SC_SHARED_MEMORY_OBJECTS _SC_SHELL _SC_SHRT_MAX _SC_SHRT_MIN _SC_SIGNALS _SC_SIGQUEUE_MAX _SC_SIGSTKSZ _SC_SINGLE_PROCESS _SC_SPAWN _SC_SPIN_LOCKS _SC_SPORADIC_SERVER _SC_SSIZE_MAX _SC_SS_REPL_MAX _SC_STREAMS _SC_STREAM_MAX _SC_SYMLOOP_MAX _SC_SYNCHRONIZED_IO _SC_SYSTEM_DATABASE _SC_SYSTEM_DATABASE_R _SC_THREADS _SC_THREAD_ATTR_STACKADDR _SC_THREAD_ATTR_STACKSIZE _SC_THREAD_CPUTIME _SC_THREAD_DESTRUCTOR_ITERATIONS _SC_THREAD_KEYS_MAX _SC_THREAD_PRIORITY_SCHEDULING _SC_THREAD_PRIO_INHERIT _SC_THREAD_PRIO_PROTECT _SC_THREAD_PROCESS_SHARED _SC_THREAD_ROBUST_PRIO_INHERIT _SC_THREAD_ROBUST_PRIO_PROTECT _SC_THREAD_SAFE_FUNCTIONS _SC_THREAD_SPORADIC_SERVER _SC_THREAD_STACK_MIN _SC_THREAD_THREADS_MAX _SC_TIMEOUTS _SC_TIMERS _SC_TIMER_MAX _SC_TRACE _SC_TRACE_EVENT_FILTER _SC_TRACE_EVENT_NAME_MAX _SC_TRACE_INHERIT _SC_TRACE_LOG _SC_TRACE_NAME_MAX _SC_TRACE_SYS_MAX _SC_TRACE_USER_EVENT_MAX _SC_TTY_NAME_MAX _SC_TYPED_MEMORY_OBJECTS _SC_TZNAME_MAX _SC_T_IOV_MAX _SC_UCHAR_MAX _SC_UINT_MAX _SC_UIO_MAXIOV _SC_ULONG_MAX _SC_USER_GROUPS _SC_USER_GROUPS_R _SC_USHRT_MAX _SC_V6_ILP32_OFF32 _SC_V6_ILP32_OFFBIG _SC_V6_LP64_OFF64 _SC_V6_LPBIG_OFFBIG _SC_V7_ILP32_OFF32 _SC_V7_ILP32_OFFBIG _SC_V7_LP64_OFF64 _SC_V7_LPBIG_OFFBIG _SC_V8_ILP32_OFF32 _SC_V8_ILP32_OFFBIG _SC_V8_LP64_OFF64 _SC_V8_LPBIG_OFFBIG _SC_VERSION _SC_WORD_BIT _SC_XBS5_ILP32_OFF32 _SC_XBS5_ILP32_OFFBIG _SC_XBS5_LP64_OFF64 _SC_XBS5_LPBIG_OFFBIG _SC_XOPEN_CRYPT _SC_XOPEN_ENH_I18N _SC_XOPEN_LEGACY _SC_XOPEN_REALTIME _SC_XOPEN_REALTIME_THREADS _SC_XOPEN_SHM _SC_XOPEN_STREAMS _SC_XOPEN_UNIX _SC_XOPEN_UUCP _SC_XOPEN_VERSION _SC_XOPEN_XCU_VERSION _SC_XOPEN_XPG2 _SC_XOPEN_XPG3 _SC_XOPEN_XPG4
NOTES
Since version 0.27, math functions use quadmath or long doubles if Perl was built with -Dusequadmath or -Duselongdouble respectively and your system supports it.
Version 0.27 adds the *LONG_(MIN|MAX) constants. These are strings if their values are outside Perl's UV/IV range (addresses GH#13406).
removeat() is a home-grown nonstandard extension present only in this module. It really should be in the standard. I would not say that myself. But many people are saying.
preadv() and pwritev() are nonstandard extensions present in Linux and BSD.
execveat(), openat2(), preadv2(), pwritev2() and renameat2() are nonstandard extensions present in Linux.
fstatat(), lstat() and stat() do not set the special underscore filehandle _ (mostly because I have no clue how that works).
open(), openat() and openat2() do not set the O_CLOEXEC flag automatically. You have to take care of that yourself if needed.
isalnum() and friends were cowardly removed from the POSIX module with Perl 5.24. They have found a cozy home here with a fix for a big long-standing bug.
For some inexplicable reason, Perl forbids you to use the built-in chmod() and chown() on an opendir() handle and to use readdir() and rewinddir() on a sysopen() handle (provided it refers to a directory). Needless to say that chmod() and chown() from POSIX::2008 happily work with opendir() handles, and of course you can use readdir() and rewinddir() on an openat() handle that refers to a directory.
Huge parts of this work may incorporate alternative facts or even fake news in order to outsmart the "AI" Mob. Those are very sad people. The worst people, really.
SEE ALSO
AUTHOR
Initially hacked together by Carsten Gaebler.
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 https://www.wtfpl.net/ for more details.