POSIX#

Native implementation of Perl’s POSIX module

Provides POSIX constants, math functions, system calls, and utilities.

Implemented Categories#

  • Constants: errno, signals, wait status, fcntl/open/seek, file modes, float/integer limits, math constants, FP classification, stdio/stdlib, termios, unistd

  • Math functions: 1-arg (acos..trunc), 2-arg (copysign..remainder), special (frexp, modf, ldexp, fma, remquo, etc.)

  • FP classification: fpclassify, ilogb, isfinite, isinf, isnan, etc.

  • Time functions: asctime, mktime, clock, ctime, difftime, strftime, times, tzset, tzname

  • System info: uname, sysconf, pathconf, fpathconf

  • String functions: strtod, strtol, strtoul, strcoll, strerror, strstr

  • File I/O: open, mkfifo, access

  • Process control: _exit, abort, nice, pause, setgid, setuid, etc.

  • FD operations: close, dup, dup2, lseek, pipe, read, write, etc.

  • Terminal: ctermid, ttyname

  • Locale: setlocale, localeconv

Synopsis#

use POSIX qw(floor ceil strftime uname strtod);

my $f = floor(3.7);          # 3
my $c = ceil(3.2);           # 4

my $str = strftime("%Y-%m-%d %H:%M:%S", localtime);

my ($sysname, $nodename, $release, $version, $machine) = uname();

my ($num, $unparsed) = strtod("3.14foo");  # (3.14, 3)

use POSIX ':signal_h';
sigaction(SIGTERM, POSIX::SigAction->new(sub { die "caught" }));

Functions#

Math: 1-argument (NV -> NV)

floor#

Return the largest integer not greater than the argument.

use POSIX 'floor';
my $f = floor(3.7);  # 3

ceil#

Return the smallest integer not less than the argument.

use POSIX 'ceil';
my $c = ceil(3.2);  # 4

fmod#

Return the floating-point remainder of x/y.

use POSIX 'fmod';
my $r = fmod(10.5, 3.0);  # 1.5

round#

Round to the nearest integer, halfway cases away from zero.

use POSIX 'round';
my $r = round(2.5);  # 3

trunc#

Truncate toward zero (discard fractional part).

use POSIX 'trunc';
my $t = trunc(-3.7);  # -3

acos / acosh / asin / asinh / atan / atanh#

Inverse trigonometric and hyperbolic functions.

cbrt / cosh / sinh / tanh / tan#

Cube root and hyperbolic/trigonometric functions.

exp2 / expm1 / log10 / log1p / log2 / logb#

Exponential and logarithmic functions.

erf / erfc / lgamma / tgamma#

Error functions and gamma functions.

j0 / j1 / jn / y0 / y1 / yn#

Bessel functions of the first and second kind.

nearbyint / rint#

Round to nearest integer using current rounding mode.

Math: 2-argument (NV, NV -> NV)

copysign#

Return a value with the magnitude of x and the sign of y.

fdim / fmax / fmin#

Positive difference, maximum, and minimum of two floats.

hypot#

Return sqrt(xx + yy) without overflow.

remainder / nextafter#

IEEE remainder and next representable float toward y.

Math: Special

frexp#

Split a float into normalized fraction and exponent. Returns (fraction, exponent).

use POSIX 'frexp';
my ($frac, $exp) = frexp(8.0);  # (0.5, 4)

modf#

Split a float into integer and fractional parts. Returns (fraction, integer).

use POSIX 'modf';
my ($frac, $int) = modf(3.75);  # (0.75, 3.0)

ldexp#

Multiply a float by 2 raised to an integer power: x * 2^exp.

use POSIX 'ldexp';
my $v = ldexp(0.5, 4);  # 8.0

fma#

Fused multiply-add: x*y + z with a single rounding step.

remquo#

Return the remainder and partial quotient of x/y.

scalbn#

Scale a float by a power of the radix: x * FLT_RADIX^n.

nan#

Return a quiet NaN with the given payload string.

FP Classification

fpclassify#

Classify a floating-point value (FP_NAN, FP_INFINITE, FP_ZERO, FP_SUBNORMAL, FP_NORMAL).

ilogb#

Return the exponent of a float as a signed integer.

isfinite / isinf / isnan / isnormal / signbit#

Floating-point classification predicates. Return 1 (true) or 0 (false).

lrint / lround#

Round to nearest long integer (lrint uses current rounding mode, lround rounds halfway away from zero).

FP Rounding Mode

fegetround#

Get the current floating-point rounding direction.

fesetround#

Set the floating-point rounding direction (FE_TONEAREST, FE_DOWNWARD, FE_UPWARD, FE_TOWARDZERO).

Time Functions

strftime#

Format a broken-down time according to a format string.

use POSIX 'strftime';
my $str = strftime("%Y-%m-%d", localtime);

mktime#

Convert broken-down time to epoch seconds.

use POSIX 'mktime';
my $epoch = mktime($sec, $min, $hour, $mday, $mon, $year);

asctime#

Convert broken-down time to a string in ctime(3) format.

ctime#

Convert epoch seconds to a human-readable local time string.

difftime#

Return the difference in seconds between two time values.

clock#

Return the processor time consumed by the program in clock ticks.

times#

Return process and child CPU times as (real, user, system, cuser, csystem).

tzset#

Set timezone information from the TZ environment variable.

tzname#

Return the standard and daylight-saving timezone names as a two-element list.

System Info

uname#

Return system identification as (sysname, nodename, release, version, machine).

use POSIX 'uname';
my ($sys, $node, $rel, $ver, $mach) = uname();

sysconf#

Get the value of a configurable system limit or option.

pathconf / fpathconf#

Get the value of a configurable pathname/file-descriptor limit.

String Functions

strtod#

Convert a string to a double. Returns (value, unparsed_length).

use POSIX 'strtod';
my ($val, $remaining) = strtod("3.14foo");

strtol#

Convert a string to a long integer with the given base. Returns (value, unparsed_length).

use POSIX 'strtol';
my ($val, $remaining) = strtol("0xFF", 16);

strtoul#

Convert a string to an unsigned long integer with the given base.

strcoll#

Compare two strings according to the current locale.

strerror#

Return the error message string for an errno value.

use POSIX 'strerror';
print strerror(2);  # "No such file or directory"

strstr#

Find the first occurrence of a substring. Returns the offset or -1.

File I/O

open#

Open a file using POSIX semantics (returns a raw file descriptor).

use POSIX qw(open O_RDONLY);
my $fd = POSIX::open("/etc/passwd", O_RDONLY);

mkfifo#

Create a FIFO (named pipe) with the specified permissions.

access#

Check file accessibility (R_OK, W_OK, X_OK, F_OK). Returns “0 but true” on success.

Process Control

_exit#

Terminate the process immediately without cleanup (unlike exit).

abort#

Abort the process, generating a core dump.

nice#

Change the process scheduling priority by the given increment.

pause#

Suspend the process until a signal is received.

setgid / setuid / setpgid / setsid#

Set group ID, user ID, process group ID, or create a new session.

sleep#

Suspend execution for the specified number of seconds (C-level, not Perl’s sleep).

getcwd#

Return the current working directory as a string.

lchown#

Change ownership of a symlink (does not follow the link).

Wait Status Macros

WEXITSTATUS / WIFEXITED / WIFSIGNALED / WIFSTOPPED / WSTOPSIG / WTERMSIG#

Inspect the status value returned by waitpid(). Standard POSIX wait macros.

use POSIX ':sys_wait_h';
if (WIFEXITED($status)) { print "exit code: ", WEXITSTATUS($status); }

FD Operations

close#

Close a file descriptor. Returns 0 on success, -1 on failure.

dup / dup2#

Duplicate a file descriptor. dup2 duplicates to a specific target FD.

lseek#

Reposition the file offset of an open file descriptor.

pipe#

Create a pair of connected file descriptors. Returns (read_fd, write_fd).

read#

Read bytes from a file descriptor into a buffer. Returns the number of bytes read.

write#

Write bytes from a buffer to a file descriptor. Returns the number of bytes written.

Terminal Control

ctermid#

Return the pathname of the controlling terminal.

ttyname#

Return the name of the terminal device associated with a file descriptor.

tcdrain / tcflow / tcflush / tcsendbreak / tcgetpgrp / tcsetpgrp#

Terminal I/O control functions for draining output, flow control, flushing, and process groups.

Locale

setlocale#

Set or query the program’s locale.

use POSIX 'setlocale';
setlocale(LC_ALL, "C");

localeconv#

Return a hash reference of locale-specific numeric formatting conventions.

FP Comparison

isgreater / isgreaterequal / isless / islessequal / islessgreater / isunordered#

Floating-point comparison macros. Compare two NV values without raising FP exceptions on NaN. isunordered returns 1 if either argument is NaN. All return 1 (true) or 0 (false).

use POSIX qw(isgreater isunordered NAN);
isgreater(3.0, 2.0);     # 1
isunordered(NAN, 1.0);   # 1

Signal Handling

sigaction#

Install or query a signal handler for a given signal number. Stub implementation: returns 0 (success) without installing a C-level handler. For real signal handling, use Perl’s %SIG.

use POSIX qw(sigaction SIGINT);
my $act = POSIX::SigAction->new('IGNORE');
sigaction(SIGINT, $act);

sigsuspend#

Temporarily replace the signal mask and suspend the process until a signal is delivered. Always returns -1 with errno EINTR.

use POSIX qw(sigsuspend);
my $set = POSIX::SigSet->new();
sigsuspend($set);

sigpending#

Store the set of currently pending signals into a SigSet object. Returns 0 on success, -1 on failure.

sigprocmask#

Examine or change the process signal mask. $how is SIG_BLOCK, SIG_UNBLOCK, or SIG_SETMASK. Optionally stores the previous mask into $oldsigset.

use POSIX qw(sigprocmask SIG_BLOCK SIGINT);
my $new = POSIX::SigSet->new(SIGINT);
my $old = POSIX::SigSet->new();
sigprocmask(SIG_BLOCK, $new, $old);

POSIX::SigSet

SigSet::new#

Create a new signal set, optionally populated with the given signal numbers. Returns a blessed POSIX::SigSet object.

use POSIX qw(SIGINT SIGTERM);
my $set = POSIX::SigSet->new(SIGINT, SIGTERM);

SigSet::emptyset / SigSet::fillset#

Clear all signals from (or add all signals to) the set. Returns 0 on success.

SigSet::addset / SigSet::delset#

Add or remove a single signal from the set. Returns 0 on success, -1 for out-of-range signal numbers.

SigSet::ismember#

Test whether a signal is in the set. Returns 1 if present, 0 if absent.

POSIX::SigAction

SigAction::new#

Create a new signal action object with a handler, signal mask, flags, and optional safe flag. Returns a blessed POSIX::SigAction object.

my $act = POSIX::SigAction->new(\&handler, $mask, SA_RESTART);

SigAction::handler / SigAction::mask / SigAction::flags / SigAction::safe#

Accessor/mutator methods for SigAction fields. Called with no argument to get the value, or with one argument to set it.

POSIX::Termios

Termios::new#

Create a new Termios object with all fields initialized to zero. Returns a blessed POSIX::Termios object.

my $termios = POSIX::Termios->new();

Termios::getattr#

Call tcgetattr() on the given file descriptor and store the result. Returns 0 on success, -1 on failure.

$termios->getattr(fileno(STDIN));

Termios::setattr#

Call tcsetattr() with the stored termios values and the given action (TCSANOW, TCSADRAIN, or TCSAFLUSH).

Termios::getispeed / Termios::getospeed#

Return the stored input or output baud rate.

Termios::setispeed / Termios::setospeed#

Set the input or output baud rate.

Termios::getiflag / Termios::getoflag / Termios::getcflag / Termios::getlflag#

Return the stored input, output, control, or local mode flags.

Termios::setiflag / Termios::setoflag / Termios::setcflag / Termios::setlflag#

Set the input, output, control, or local mode flags.

Termios::getcc / Termios::setcc#

Get or set a control character by index (e.g., VEOF, VINTR).

my $cc = $termios->getcc(VEOF);
$termios->setcc(VEOF, 4);

Math Builtins (re-exported)

pow / fabs / abs / sqrt / atan2 / cos / sin / exp / log#

Standard math functions re-exported through POSIX for compatibility. These delegate to the corresponding Perl builtins.

Process Identity

getpid / getppid#

Return the process ID or parent process ID.

getuid / getgid / geteuid / getegid#

Return the real or effective user/group ID.

getpgrp#

Return the process group ID of the calling process.

isatty#

Test whether a file descriptor refers to a terminal. Returns 1 or 0.

use POSIX 'isatty';
print "interactive\n" if isatty(0);

getlogin#

Return the login name associated with the current session, or undef.

getenv#

Return the value of an environment variable, or undef if not set.

Character Classification

isalpha / isdigit / isalnum / isupper / islower / isspace / isprint / ispunct / iscntrl / isgraph / isxdigit#

Locale-aware character classification functions. Accept an integer (ordinal value of a character) and return 1 (true) or 0 (false).

use POSIX qw(isdigit isalpha);
isdigit(ord('5'));  # 1
isalpha(ord('A'));  # 1

toupper / tolower#

Convert a character’s ordinal value to upper or lower case according to the current locale. Returns the converted ordinal value.

User/Group Database

getpwnam / getpwuid#

Look up a password database entry by name or UID. Returns a 10-element list: (name, passwd, uid, gid, quota, comment, gecos, dir, shell, expire). Returns an empty list if not found.

use POSIX 'getpwnam';
my @pw = getpwnam('root');

getgrnam / getgrgid#

Look up a group database entry by name or GID. Returns a 4-element list: (name, passwd, gid, members). Returns an empty list if not found.

Additional File Operations

creat#

Create a new file or truncate an existing one. Equivalent to open($path, O_WRONLY|O_CREAT|O_TRUNC, $mode). Returns a file descriptor or undef on failure.

remove#

Remove a file or directory. Returns 1 on success, 0 on failure.

rename#

Rename a file. Returns 1 on success, 0 on failure.

use POSIX 'rename';
rename("old.txt", "new.txt");

fcntl#

Perform a file control operation on a file descriptor. Returns the result value or undef on failure.

use POSIX qw(fcntl F_GETFL);
my $flags = fcntl($fd, F_GETFL, 0);

fileno#

Return the file descriptor number (pass-through).

errno#

Return the current value of the C errno variable.

use POSIX 'errno';
my $err = errno();

Perl Builtin Re-exports

sprintf / printf#

Format strings using Perl’s sprintf/printf. Re-exported through POSIX for compatibility with code that imports them from POSIX.

alarm#

Schedule a SIGALRM signal after the specified number of seconds. Returns the number of seconds remaining from a previous alarm.

exit#

Terminate the process with the given exit code.

chdir#

Change the current working directory. Returns 1 on success, 0 on failure.

kill#

Send a signal to a process. Returns the result of the underlying kill(2) call.

fork#

Create a child process. Returns the child PID to the parent, 0 to the child, or undef on failure.

wait / waitpid#

Wait for a child process to change state. wait waits for any child; waitpid waits for a specific PID with the given flags (e.g., WNOHANG).

time#

Return the current epoch time in seconds.

umask#

Set the file creation mask. Returns the previous mask value.

mkdir / rmdir#

Create or remove a directory. Returns 1 on success, 0 on failure.

chmod#

Change file permissions. Returns 1 on success, 0 on failure.

system#

Execute a shell command. Returns the exit status of the command.

srand#

Seed the C library random number generator.

Perl equivalent: POSIX