NAME
POSIX::2008 - Perl interface to POSIX.1-2008
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 contains many of the interfaces specified by POSIX.1-2008 that the core POSIX module withholds, implements in Perl or fucked up.
It also contains a few nonstandard interfaces present in Linux, BSD and Solaris that are extensions of the POSIX interfaces.
This module is provided "as is" unless someone volunteers to maintain it.
FILE DESCRIPTORS AND HANDLES
Since version 0.05, all I/O functions that take numeric file descriptors also accept Perl file or directory handles.
SYSTEM CALL RETURN VALUES
A system call return value of -1 meaning "error" is mapped to undef.
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 open(), read(), write(), readv(), writev(), pread(), pwrite(), preadv(), pwritev(), preadv2(), pwritev2(), getpriority(). 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-
ret = access(path, mode);
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(). 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);
casinh-
(re, im) = casinh(re, im);
catan-
(re, im) = catan(re, im);
catanh-
(re, im) = catanh(re, im);
catclose-
ret = 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);
chdir-
ret = chdir(dir);
dircan be a path, a Perl file handle or a file descriptor. chmod-
ret = chmod(what, mode);
whatcan be a path, a Perl file handle or a file descriptor. chown-
ret = chown(what, uid, gid);
whatcan be a path, a Perl file handle or a file descriptor. cimag-
im = cimag(re, im);
clock-
t = clock()
clock_getcpuclockid-
clock_id = clock_getcpuclockid(pid);
pid defaults to
$$. Returns undef on error. clock_getres-
(sec, nsec) = clock_getres(clock_id);
clock_id defaults to
CLOCK_REALTIME. Returns empty list on error. clock_gettime-
(sec, nsec) = clock_gettime(clock_id);
clock_id defaults to
CLOCK_REALTIME. Returns empty list on error. clock_nanosleep-
(rem_sec, rem_nsec) = clock_nanosleep(clock_id, flags, sec, nsec);
In scalar context returns the remaining seconds as a floating point number.
clock_settime-
ret = clock_settime(clock_id, sec, nsec);
clog-
(re, im) = clog(re, im);
close-
ret = close(fd);
confstr-
s = confstr(name);
name is one of the
_CS_*integer constants. 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);
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%. 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);
exp-
y = exp(x);
exp2-
y = exp2(x);
expm1-
y = expm1(x);
faccessat-
ret = faccessat(dirfd, path, amode, flags=0);
flags is the bitwise OR of zero or more of
AT_EACCESS,AT_SYMLINK_NOFOLLOW. fchmodat-
ret = fchmodat(dirfd, path, mode, flags=0);
flags can be 0 or
AT_SYMLINK_NOFOLLOW. fchownat-
ret = fchownat(dirfd, path, uid, gid, flags=0);
flags can be 0 or
AT_SYMLINK_NOFOLLOW. fdatasync-
ret = fdatasync(fd);
fdopen-
ret = fdopen(fd, mode);
Returns a file handle associated with the file descriptor fd or undef on error. mode is one of the values
"r","w","a"with an optional"+"and/or"b".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.
fdopendir-
ret = fdopendir(fd);
Returns a directory handle associated with the file descriptor fd or undef on error. Usage example:
my $dh = do { sysopen my $fh, '/tmp', O_RDONLY|O_DIRECTORY|O_NOFOLLOW; fdopendir($fh); # or fdopendir(fileno $fh) but the former also works # with handles from opendir() for which fileno does # not work before Perl 5.22 }; my @files = readdir $dh; # this would fail with $fh from sysopen fdim-
d = fdim(double x, double y);
feclearexcept-
ret = feclearexcept(excepts);
Returns
0 but trueon success, undef on error. fegetround-
rounding_mode = fegetround();
feraiseexcept-
ret = feraiseexcept(excepts);
Returns
0 but trueon success, undef on error. fesetround-
ret = fesetround(round);
Returns
0 but trueon success, undef on error. fetestexcept-
excepts_currently_set = fetestexcept(excepts);
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-
ret = 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-
fpclassify(x);
Returns one of
FP_NAN,FP_INFINITE,FP_ZERO,FP_SUBNORMAL,FP_NORMAL. 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.See
stat()for notes on the return values and bugs inCORE::stat().Returns an empty list on error.
fsync-
ret = fsync(fd);
futimens-
ret = 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();
geteuid-
euid = geteuid();
getgid-
gid = getgid();
gethostid-
hostid = gethostid();
gethostname-
hostname = gethostname();
getitimer-
(int_sec, int_usec, val_sec, val_usec) = getitimer(which);
which is one of
ITIMER_REAL,ITIMER_VIRTUAL,ITIMER_PROF. 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.
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 of
RUN_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. 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 is
USER_PROCESSorLOGIN_PROCESSand returns the first one whose ut_line field matches ut_line. hypot-
r = hypot(x, y);
ilogb-
y = ilogb(x);
isalnum-
ret = isalnum(charstring);
Like POSIX::isalnum() but returns 0 for the empty string.
isalpha-
ret = isalpha(charstring);
Like POSIX::isalpha() but returns 0 for the empty string.
isascii-
ret = isascii(charstring);
POSIX.1-2008 marks it as obsolete, but I include it anyway.
isatty-
ret = isatty(fd);
isblank-
ret = isblank(charstring);
Like POSIX::isblank() but returns 0 for the empty string.
iscntrl-
ret = iscntrl(charstring);
Like POSIX::iscntrl() but returns 0 for the empty string.
isdigit-
ret = isdigit(charstring);
Like POSIX::isdigit() but returns 0 for the empty string.
isfinite-
ret = isfinite(x);
isgraph-
ret = isgraph(charstring);
Like POSIX::isgraph() but returns 0 for the empty string.
isinf-
ret = isinf(x);
islower-
ret = islower(charstring);
Like POSIX::islower() but returns 0 for the empty string.
isnan-
ret = isnan(x);
isnormal-
ret = isnormal(x);
isprint-
ret = isprint(charstring);
Like POSIX::isprint() but returns 0 for the empty string.
ispunct-
ret = ispunct(charstring);
Like POSIX::ispunct() but returns 0 for the empty string.
isspace-
ret = isspace(charstring);
Like POSIX::isspace() but returns 0 for the empty string.
isupper-
ret = isupper(charstring);
Like POSIX::isupper() but returns 0 for the empty string.
isxdigit-
ret = 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-
ret = killpg(pgrp, sig);
l64a-
s = l64a(n);
lchown-
ret = lchown(path, uid, gid);
ldexp-
y = ldexp(x, exp);
lgamma-
y = lgamma(x);
link-
ret = link(path1, path2);
linkat-
ret = linkat(fd1, path1, fd2, path2, flags=0);
flags can be 0 or
AT_SYMLINK_FOLLOW. log1p-
y = log1p(x);
log2-
y = log2(x);
logb-
y = logb(x);
lrand48-
r = lrand48();
lround-
l = lround(x);
Calls
llround()orlround()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. 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 an empty list on error.
mkdir-
ret = mkdir(path, [mode = 0777]);
mkdirat-
ret = mkdirat(fd, path, mode);
mkdtemp-
name = mkdtemp(template);
mkfifo-
ret = mkfifo(path, mode);
mkfifoat-
ret = mkfifoat(fd, path, mode);
mknod-
ret = mknod(path, mode, dev);
mknodat-
ret = mknodat(fd, path, mode, dev);
mkstemp-
(fd, name) = mkstemp(template);
mrand48-
mrand48();
nanosleep-
(rem_sec, rem_nsec) = nanosleep(sec, nsec);
In scalar context returns the remaining seconds as a floating point number.
nearbyint-
y = nearbyint(x);
nextafter-
z = nextafter(x, y);
nexttoward-
z = nexttoward(x, y);
nice-
ret = nice(incr);
Returns undef on error.
nrand48-
r = nrand48()
open-
ret = open(path, flags=O_RDONLY, mode=0666);
openat-
ret = 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.
openat2-
ret = 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.
posix_fadvise-
ret = posix_fadvise(fd, offset, len, advice);
advice is one of the
POSIX_FADV_constants.Returns undef on error
posix_fallocate-
ret = posix_fallocate(fd, offset, len);
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.
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.
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.This syscall is Linux-specific.
ptsname-
name = ptsname(fd);
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). 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.
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.This syscall is Linux-specific.
random-
r = random();
read-
bytes_read = read(fd, buf, count);
Like
POSIX::read()but returns 0 at EOF instead of "0 but true". readv-
bytes_read = readv(fd, buffers, sizes);
Example:
my $fh = openat(\AT_FDCWD, '/tmp/foobar', O_RDWR|O_CREAT|O_TRUNC); pwrite($fh, 'foobar', 6, 0); readv($fh, my @buf, [4, 0, 4, 4]); # -> @buf is ('foob', '', 'ar')readv()reads from the file descriptor fd into buffers as many strings as there are elements in sizes.buffers must be a variable holding either an array or an array reference, i.e.
@bufor$buf.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.
If the total byte count of sizes exceeds the number of bytes actually read from fd, there may be one partly filled buffer and the rest of sizes is skipped, so you may end up with less strings in buffers than there are elements in sizes.
readv()returns the number of bytes read (which may be less than the total bytes in sizes) or undef on error. 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.
remainder-
rem = remainder(x, y);
Returns undef on error.
remove-
ret = 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. remquo-
(rem, quo) = remquo(x, y);
Returns an empty list on error.
rename-
ret = rename(old, new);
renameat-
ret = renameat(olddirfd, oldpath, newdirfd, newpath);
renameat2-
ret = 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. round-
r = round(x);
scalbn-
y = scalbn(x, n);
Calls
scalbln()orscalbn(), whichever is the maximum supported by your system. seed48-
(old_seed1, old_seed2, old_seed3) = seed48(seed1, seed2, seed3);
setegid-
ret = setegid(gid);
seteuid-
ret = seteuid(uid);
setgid-
ret = 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. setpriority-
ret = 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-
ret = setregid(rgid, egid);
setreuid-
ret = setreuid(ruid, euid);
setsid-
sid = setsid();
setuid-
ret = setuid(uid);
setutxent-
setutxent();
sighold-
ret = sighold(sig);
sigignore-
ret = sigignore(sig);
signbit-
b = signbit(x);
sigpause-
sigpause(sig);
sigrelse-
ret = sigrelse(sig);
sin-
y = sin(x);
sinh-
y = sinh(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);
whatcan be a path, a Perl file handle or a file descriptor.ctim_sec,blksize,blocksand 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, useeqinstead 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 an empty list on error.
strptime-
(sec, min, hour, mday, mon, year, wday, yday, isdst) = strptime(s, format[, sec, min, hour, mday, mon, year, wday, yday, isdst]);
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 and will be returned as initialized if they are not affected by the format string. Unprocessed uninitialized or undef fields are returned as undef.Returns an empty list on error.
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. symlink-
ret = symlink(target, linkpath);
symlinkat-
ret = symlinkat(target, dirfd, linkpath);
sync-
sync();
tan-
y = tan(x);
tanh-
y = tanh(x);
tgamma-
y = tgamma(x);
timer_create-
timerid = timer_create(clockid, signal);
Returns undef on error.
timer_delete-
ret = timer_delete(timerid);
Returns
0 but trueon success, undef on error. timer_getoverrun-
count = timer_getoverrun(timerid);
Returns undef on error.
timer_gettime-
(interval_sec, interval_nsec, initial_sec, initial_nsec) = timer_gettime(timerid);
Returns an empty list on error.
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. truncate-
ret = truncate(path, length);
trunc-
y = trunc(x);
ttyname-
name = ttyname(fd);
unlink-
ret = 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-
ret = unlinkat(dirfd, path, flags=0);
flags can be 0 or
AT_REMOVEDIR. utimensat-
ret = utimensat(dirfd, path, flags, atime_sec, atime_nsec, mtime_sec, mtime_nsec);
flags can be 0 or
AT_SYMLINK_NOFOLLOW, defaults to 0.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. Undefined or empty elements are skipped.Returns the number of bytes written or undef on error.
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() and 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_ and _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
CONSTANTS
AT_EACCESS AT_EMPTY_PATH AT_FDCWD AT_NO_AUTOMOUNT AT_REMOVEDIR AT_SYMLINK_FOLLOW AT_SYMLINK_NOFOLLOW RENAME_EXCHANGE RENAME_NOREPLACE RENAME_WHITEOUT RESOLVE_BENEATH RESOLVE_CACHED RESOLVE_IN_ROOT RESOLVE_NO_MAGICLINKS RESOLVE_NO_SYMLINKS RESOLVE_NO_XDEV
BOOT_TIME NEW_TIME OLD_TIME DEAD_PROCESS INIT_PROCESS LOGIN_PROCESS USER_PROCESS RUN_LVL
CLOCK_BOOTTIME CLOCK_HIGHRES CLOCK_MONOTONIC CLOCK_MONOTONIC_COARSE CLOCK_MONOTONIC_FAST CLOCK_MONOTONIC_PRECISE CLOCK_MONOTONIC_RAW CLOCK_PROCESS_CPUTIME_ID CLOCK_REALTIME CLOCK_REALTIME_COARSE CLOCK_REALTIME_FAST CLOCK_REALTIME_PRECISE CLOCK_SOFTTIME CLOCK_THREAD_CPUTIME_ID CLOCK_UPTIME CLOCK_UPTIME_FAST CLOCK_UPTIME_PRECISE
_CS_GNU_LIBC_VERSION _CS_GNU_LIBPTHREAD_VERSION _CS_PATH
F_DUPFD F_DUPFD_CLOEXEC F_GETFD F_SETFD F_GETFL F_SETFL F_GETLK F_SETLK F_SETLKW F_GETOWN F_SETOWN F_RDLCK F_UNLCK F_WRLCK
FE_TONEAREST FE_TOWARDZERO FE_UPWARD FE_DOWNWARD
FD_CLOEXEC
FNM_CASEFOLD FNM_FILE_NAME FNM_LEADING_DIR FNM_NOESCAPE FNM_NOMATCH FNM_PATHNAME FNM_PERIOD
FP_INFINITE FP_NAN FP_NORMAL FP_SUBNORMAL FP_ZERO
TIMER_ABSTIME ITIMER_PROF ITIMER_REAL ITIMER_VIRTUAL
O_ACCMODE O_APPEND O_ASYNC O_CLOEXEC O_CREAT O_DIRECT O_DIRECTORY O_DSYNC O_EXCL O_EXEC O_LARGEFILE O_NDELAY O_NOATIME O_NOCTTY O_NOFOLLOW O_NONBLOCK O_PATH O_RDONLY O_RDWR O_RSYNC O_SEARCH 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
RTLD_GLOBAL RTLD_LAZY RTLD_LOCAL RTLD_NOW
RWF_APPEND RWF_DSYNC RWF_HIPRI RWF_NOWAIT RWF_SYNC
SEEK_SET SEEK_CUR SEEK_END SEEK_DATA SEEK_HOLE F_OK R_OK W_OK X_OK
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
UTIME_NOW UTIME_OMIT
NOTES
preadv() and pwritev() are nonstandard extensions present in Linux and BSD.
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.0. They have found a cozy home here with a fix for a long-standing bug.
SEEK_DATA and SEEK_HOLE are nonstandard extensions present in Linux, Solaris, FreeBSD, and DragonFly BSD; they are proposed for inclusion in the next POSIX revision (Issue 8).
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 http://www.wtfpl.net/ for more details.