POSIX#
The POSIX (IEEE Std 1003.1) C standard library, exposed to Perl.
Reach for POSIX when you need something the Perl core does not
give you directly: a strftime format, setlocale to switch
numeric conventions, sigaction for signal handling, wait-status
macros like WIFEXITED / WEXITSTATUS, mkfifo, or any of the
hundreds of E* / O_* / F_* / S_* constants from <errno.h>,
<fcntl.h>, and friends.
The module groups its surface into the categories below; each one
becomes a section on the rendered POSIX page. Every category is
backed by libc calls, so behaviour matches the host’s C library
exactly (glibc / musl on Linux).
Functions#
Math#
abs#
Integer absolute value of $n.
frexp#
Split a floating-point number into mantissa and exponent.
modf#
Split a number into integer and fractional parts, both as doubles.
ldexp#
Compute $x * 2**$exp with a single rounding step.
Synopsis
my $y = POSIX::ldexp(1.5, 10); # 1536
Differences from upstream
Fully compatible with upstream POSIX.
scalbn#
Compute $x * FLT_RADIX**$n efficiently. On IEEE-754 systems scalbn is equivalent to ldexp.
Differences from upstream
Fully compatible with upstream POSIX.
fma#
Fused multiply-add: $x * $y + $z with a single rounding.
nan#
Build a quiet NaN, optionally with a payload string.
remquo#
Floating-point remainder with partial quotient.
jn#
Bessel function of the first kind, integer order $n.
yn#
Bessel function of the second kind, integer order $n.
Float classification#
fpclassify#
Classify a floating-point number.
ilogb#
Exponent of $x as an integer, trunc(log2(|$x|)).
Edge cases
ilogb(0)returnsFP_ILOGB0(typicallyINT_MIN).ilogb(NaN)returnsFP_ILOGBNAN.ilogb(inf)returnsINT_MAX.
Differences from upstream
Fully compatible with upstream POSIX.
lrint#
Round $x to the nearest integer, respecting the current rounding mode, and return it as an integer.
Differences from upstream
Fully compatible with upstream POSIX.
See also
lround— always rounds half-away-from-zero regardless of mode.fegetround/fesetround— query or change the rounding mode.
lround#
Round $x half-away-from-zero to the nearest integer.
Differences from upstream
Fully compatible with upstream POSIX.
See also
lrint— rounds according to the current FP rounding mode.
fegetround#
Current floating-point rounding direction.
What you get back
An integer matching one of the FE_TONEAREST, FE_DOWNWARD,
FE_UPWARD, FE_TOWARDZERO constants.
Differences from upstream
Fully compatible with upstream POSIX.
See also
fesetround— change the mode.
fesetround#
Change the floating-point rounding direction.
Wait status#
wexitstatus#
Exit code of a child that terminated normally.
wifexited#
True if the child terminated normally (via exit or return from main).
Differences from upstream
Fully compatible with upstream POSIX.
wifsignaled#
True if the child was killed by a signal.
Differences from upstream
Fully compatible with upstream POSIX.
See also
WTERMSIG— the signal number, when this is true.
wifstopped#
True if the child is stopped (usable with waitpid(..., WUNTRACED)).
Differences from upstream
Fully compatible with upstream POSIX.
wstopsig#
Signal number that stopped the child, meaningful only when WIFSTOPPED($status) is true.
Differences from upstream
Fully compatible with upstream POSIX.
wtermsig#
Signal number that killed the child, meaningful only when WIFSIGNALED($status) is true.
Differences from upstream
Fully compatible with upstream POSIX.
Strings and printing#
strtod#
Parse a double from the start of a string, locale-aware.
strtol#
Parse a signed integer from the start of a string, in a given base.
strtoul#
Parse an unsigned integer from the start of a string, in a given base.
strcoll#
Compare two strings using the current LC_COLLATE ordering.
What you get back
A negative, zero, or positive integer, suitable for use as a
cmp-like sort return. The ordering depends on the locale set
via setlocale(LC_COLLATE, ...).
Differences from upstream
Fully compatible with upstream POSIX.
strerror#
Message string for an errno value.
strstr#
Byte offset of the first occurrence of $needle in $haystack, or -1 if not found.
Edge cases
Empty
$needle: returns0(matches the empty substring at the start), matching Cstrstr.
Differences from upstream
Fully compatible with upstream POSIX.
See also
Built-in
index— the Perl-native way to do this.
sprintf#
Format a string POSIX-style, identical to built-in sprintf.
System and process#
getpid#
Process ID of the current process.
Differences from upstream
Fully compatible with upstream POSIX.
getppid#
Process ID of the parent process.
Differences from upstream
Fully compatible with upstream POSIX.
getuid#
Real user ID of the current process.
Differences from upstream
Fully compatible with upstream POSIX.
geteuid#
Effective user ID of the current process.
Differences from upstream
Fully compatible with upstream POSIX.
getgid#
Real group ID of the current process.
Differences from upstream
Fully compatible with upstream POSIX.
getegid#
Effective group ID of the current process.
Differences from upstream
Fully compatible with upstream POSIX.
setuid#
Change the real user ID of the current process.
What you get back
1 on success, 0 on failure (and $! is set). Permission is
required; only privileged processes can switch to arbitrary UIDs.
Differences from upstream
Fully compatible with upstream POSIX.
setgid#
Change the real group ID of the current process.
What you get back
1 on success, 0 on failure.
Differences from upstream
Fully compatible with upstream POSIX.
setpgid#
Put process $pid into process group $pgid.
setsid#
Create a new session and become its leader.
What you get back
The new session ID on success, -1 on failure. The caller must
not already be a process group leader.
Differences from upstream
Fully compatible with upstream POSIX.
uname#
Kernel and machine identification as a five-element list.
sysconf#
Runtime system configuration value for the given _SC_* name.
getpgrp#
Process group ID of the current process.
Differences from upstream
Fully compatible with upstream POSIX.
getlogin#
Login name of the user running the process, or undef if not available (e.g. no controlling terminal).
Differences from upstream
Fully compatible with upstream POSIX.
getenv#
Value of environment variable $name, or undef if it is unset.
Synopsis
my $path = POSIX::getenv("PATH");
Differences from upstream
Fully compatible with upstream POSIX. Prefer $ENV{$name} in
ordinary Perl code.
exit#
Terminate the process immediately with the given status, skipping END blocks, destructors, and stdio flushing.
Synopsis
POSIX::_exit(0);
Differences from upstream
Fully compatible with upstream POSIX. Note: exported as _exit,
not exit, to avoid colliding with the core built-in.
abort#
Abort the process abnormally (typically producing a core dump).
Differences from upstream
Fully compatible with upstream POSIX.
nice#
Adjust the current process’s scheduling niceness by $incr.
pause#
Suspend the process until any signal is delivered.
What you get back
Always -1 (with $! set to EINTR) once a signal handler
returns — pause has no “success” exit path.
Differences from upstream
Fully compatible with upstream POSIX.
sleep#
Suspend the process for $secs seconds, or until a signal arrives.
What you get back
The number of seconds left unslept — 0 for a full sleep, or a
positive remainder when a signal cut the sleep short.
Differences from upstream
Fully compatible with upstream POSIX.
File and I/O#
isatty#
True if $fd refers to a terminal.
Differences from upstream
Fully compatible with upstream POSIX.
See also
ttyname— the device path for a terminal fd.
ttyname#
Device path of the terminal attached to $fd, or undef if none.
Differences from upstream
Fully compatible with upstream POSIX.
ctermid#
Path of the controlling terminal.
What you get back
On most systems, the string "/dev/tty".
Differences from upstream
Fully compatible with upstream POSIX.
getcwd#
Current working directory as an absolute path.
What you get back
The path as a byte string, or undef if the call fails (for
example, if the process has no read permission on some ancestor
directory).
Differences from upstream
Fully compatible with upstream POSIX.
See also
Cwd::getcwd— the recommended Perl-level interface.
access#
Check the caller’s permissions on a path.
lchown#
Change the owner/group of a symlink itself (without following it).
Synopsis
POSIX::lchown($uid, $gid, $path);
What you get back
1 on success, 0 on failure.
Differences from upstream
Fully compatible with upstream POSIX.
mkfifo#
Create a FIFO (named pipe) at $path with permission bits $mode.
What you get back
1 on success, 0 on failure.
Differences from upstream
Fully compatible with upstream POSIX.
remove#
Delete a file or empty directory at $path.
What you get back
1 on success, 0 on failure. Works on both files and empty
directories (dispatching to unlink / rmdir internally).
Differences from upstream
Fully compatible with upstream POSIX.
rename#
Rename a file from $old to $new, atomically when on the same filesystem.
What you get back
1 on success, 0 on failure.
Differences from upstream
Fully compatible with upstream POSIX.
open#
Open a file by path, returning a raw file descriptor.
close#
Close a raw file descriptor.
What you get back
"0 but true" on success, undef on failure. A negative $fd
is rejected with $! set to EBADF.
Differences from upstream
Fully compatible with upstream POSIX.
See also
open,dup,dup2— where fds come from.
dup#
Duplicate a file descriptor, returning the lowest-numbered unused fd.
What you get back
The new fd as an integer on success, undef on failure. A
negative $fd is rejected with $! set to EBADF.
Differences from upstream
Fully compatible with upstream POSIX.
dup2#
Duplicate $fd1 onto $fd2, closing $fd2 first if necessary.
lseek#
Reposition the read/write offset of an open fd.
pipe#
Create an anonymous pipe and return its two fds.
read#
Read up to $nbytes bytes from $fd into $buffer.
write#
Write bytes from $buffer to $fd.
Time#
strftime#
Format a broken-down time as a string using a format template.
mktime#
Convert a broken-down local time into epoch seconds.
difftime#
Difference between two epoch times, $t1 - $t2, as a double.
Differences from upstream
Fully compatible with upstream POSIX.
tzset#
Refresh the process’s timezone information from the TZ environment variable.
Differences from upstream
Fully compatible with upstream POSIX.
tzname#
Short names of the current standard and daylight timezones.
clock#
Approximate processor time used by the program, in CLOCKS_PER_SEC units.
What you get back
An integer count of clock ticks. Divide by POSIX::CLOCKS_PER_SEC
for seconds. On Linux this counts user+system CPU time of the
whole process.
Differences from upstream
Fully compatible with upstream POSIX.
times#
Raw wall + CPU times of the process and its children, as a five-element list.
asctime#
Canonical English timestamp string from a broken-down time.
ctime#
Canonical English timestamp string for an epoch time, in local time.
Locale#
setlocale#
Query or change the program’s locale setting.
localeconv#
Numeric and monetary formatting rules for the active locale.
Character classification#
toupper#
Locale-aware uppercase of one byte value.
What you get back
The uppercased byte as an integer, or the input unchanged if it
has no uppercase form in the current LC_CTYPE locale.
Differences from upstream
Fully compatible with upstream POSIX.
See also
Core
uc— uppercase a whole string, Unicode-aware by default.
tolower#
Locale-aware lowercase of one byte value.
Differences from upstream
Fully compatible with upstream POSIX.
See also
Core
lc— lowercase a whole string.
Errno and path limits#
errno#
Current value of the C errno variable, as an integer.
What you get back
The integer value. Compare against symbolic constants like
ENOENT, EINVAL, etc., which this module also exports.
Differences from upstream
Fully compatible with upstream POSIX. In ordinary Perl code
prefer $! (which also stringifies to strerror(errno)).
See also
strerror— message string for an errno number.
fpathconf#
Runtime limit for a configuration variable on an open fd.
pathconf#
Runtime limit for a configuration variable on a pathname.
What you get back
The limit value, or -1 if unsupported/unlimited.
Differences from upstream
Fully compatible with upstream POSIX.
See also
fpathconf— same query on an already-open fd.
Terminal control#
tcdrain#
Block until all queued output on $fd has been transmitted.
What you get back
"0 but true" on success, undef on failure. A negative $fd
sets $! to EBADF.
Differences from upstream
Fully compatible with upstream POSIX.
tcflow#
Suspend or resume transmission or reception on terminal $fd.
tcflush#
Discard buffered input, output, or both on terminal $fd.
tcsendbreak#
Send a continuous break condition on terminal $fd for roughly $duration tenths of a second (0 means the implementation default).
What you get back
"0 but true" on success, undef on failure. Negative
$duration sets $! to EINVAL.
Differences from upstream
Fully compatible with upstream POSIX.
tcgetpgrp#
Process group ID of the foreground process group for terminal $fd.
What you get back
The pgid as an integer, or -1 on error (with $! set).
Differences from upstream
Fully compatible with upstream POSIX.
tcsetpgrp#
Make $pgrp the foreground process group of terminal $fd.
What you get back
"0 but true" on success, undef on failure.
Differences from upstream
Fully compatible with upstream POSIX.
termios_new#
Create a fresh POSIX::Termios object, all fields zeroed.
termios_getattr#
Fill the POSIX::Termios object with the current settings of $fd.
termios_setattr#
Apply the POSIX::Termios settings to $fd.
termios_getispeed#
Input baud rate encoded in the termios structure.
What you get back
The encoded speed as an integer (compare against B9600,
B115200, etc., which this module also exports).
Differences from upstream
Fully compatible with upstream POSIX.
termios_getospeed#
Output baud rate encoded in the termios structure.
Differences from upstream
Fully compatible with upstream POSIX.
termios_setispeed#
Encode an input baud rate into the termios structure.
What you get back
"0 but true" on success, undef on failure. The change is not
applied to the terminal until you call setattr.
Differences from upstream
Fully compatible with upstream POSIX.
termios_setospeed#
Encode an output baud rate into the termios structure.
Differences from upstream
Fully compatible with upstream POSIX.
termios_getcc#
Value of a special control character in the termios structure.
termios_setcc#
Set a special control character in the termios structure.
Edge cases
Indices beyond
NCCScroak withBad setcc subscript.The change is not applied until you call
setattr.
Differences from upstream
Fully compatible with upstream POSIX.
Signals#
sigset_new#
Create a POSIX::SigSet object, optionally pre-populated with the given signal numbers.
sigset_addset#
Add signal $sig to the set.
What you get back
"0 but true" on success, undef on failure.
Differences from upstream
Fully compatible with upstream POSIX.
sigset_delset#
Remove signal $sig from the set.
What you get back
"0 but true" on success, undef on failure.
Differences from upstream
Fully compatible with upstream POSIX.
sigset_emptyset#
Remove every signal from the set.
Differences from upstream
Fully compatible with upstream POSIX.
sigset_fillset#
Add every signal to the set.
Differences from upstream
Fully compatible with upstream POSIX.
sigset_ismember#
Test whether signal $sig is in the set.
What you get back
1 if the signal is a member, 0 if it is not, -1 on error.
Differences from upstream
Fully compatible with upstream POSIX.
sigprocmask#
Change, query, or both the set of signals blocked for this process.
sigpending#
Fill $sigset with the signals currently pending for delivery.
What you get back
"0 but true" on success, undef on failure.
Differences from upstream
Fully compatible with upstream POSIX.
sigsuspend#
Temporarily replace the signal mask with $sigset and suspend the process until any non-blocked signal arrives.
What you get back
Always undef (with $! set to EINTR) once a signal handler
has run — there is no success exit path.
Differences from upstream
Fully compatible with upstream POSIX.
sigaction#
Install or inspect a signal handler for signal $sig.
Constants#
constant#
Look up a POSIX constant by name.