use POSIX;
use POSIX qw(setsid);
use POSIX qw(:errno_h :fcntl_h);
printf "EINTR is %d\n", EINTR;
$sess_id = POSIX::setsid();
$fd = POSIX::open($path, O_CREAT|O_EXCL|O_WRONLY, 0644); # note: that's a filedescriptor, *NOT* a filehandle
#defines in C, like EINTR or O_NDELAY, are automatically exported into your
namespace. All functions are only exported if you ask for them explicitly.
Most likely people will prefer to use the fully-qualified function names.
This document gives a condensed list of the features available in the POSIX module. Consult your operating system's manpages for general information on most features. Consult the perlfunc manpage for functions which are noted as being identical to Perl's builtin functions.
The first section describes POSIX functions from the 1003.1 specification. The second section describes some classes for signal objects, TTY objects, and other miscellaneous objects. The remaining sections list various constants and macros in an organization which roughly follows IEEE Std 1003.1b-1993.
setjmp call will elicit the
message ``setjmp() is C-specific: use eval {} instead''.
Furthermore, some evil vendors will claim 1003.1 compliance, but in fact
are not so: they will not pass the PCTS (POSIX Compliance Test Suites). For
example, one vendor may not define EDEADLK, or the semantics of the errno
values set by open might not be quite right. Perl does not
attempt to verify POSIX compliance. That means you can currently
successfully say ``use POSIX'', and then later in your program you find
that your vendor has been lax and there's no usable ICANON macro after all.
This could be construed to be a bug.
if( POSIX::access( "/", &POSIX::R_OK ) ){
print "have read permission\n";
}
Returns undef on failure.
atexit is C-specific: use END {} instead.
atof is C-specific.
atoi is C-specific.
atol is C-specific.
bsearch not supplied.
calloc is C-specific.
IO::Handle::clearerr instead.
POSIX::open.
$fd = POSIX::open( "foo", &POSIX::O_RDONLY ); POSIX::close( $fd );
Returns undef on failure.
POSIX::open. Use POSIX::close to close the file.
$fd = POSIX::creat( "foo", 0611 ); POSIX::close( $fd );
$path = POSIX::ctermid();
$name = POSIX::cuserid();
div is C-specific.
This uses file descriptors such as those obtained by calling
POSIX::open.
Returns undef on failure.
This uses file descriptors such as those obtained by calling
POSIX::open.
Returns undef on failure.
$errno = POSIX::errno();
execl is C-specific.
execle is C-specific.
execlp is C-specific.
execv is C-specific.
execve is C-specific.
execvp is C-specific.
IO::Handle::close instead.
IO::Handle::new_from_fd instead.
IO::Handle::eof instead.
IO::Handle::error instead.
IO::Handle::flush instead.
IO::Handle::getc instead.
IO::Seekable::getpos instead.
IO::Handle::gets instead.
IO::Handle::fileno instead.
IO::File::open instead.
POSIX::open.
The following will determine the maximum length of the longest allowable
pathname on the filesystem which holds /tmp/foo.
$fd = POSIX::open( "/tmp/foo", &POSIX::O_RDONLY ); $path_max = POSIX::fpathconf( $fd, &POSIX::_PC_PATH_MAX );
Returns undef on failure.
fprintf is C-specific--use printf instead.
fputc is C-specific--use print instead.
fputs is C-specific--use print instead.
fread is C-specific--use read instead.
free is C-specific.
freopen is C-specific--use open instead.
($mantissa, $exponent) = POSIX::frexp( 3.14 );
fscanf is C-specific--use <> and regular expressions
instead.
IO::Seekable::seek instead.
IO::Seekable::setpos instead.
POSIX::open. The data returned is identical to the data from Perl's builtin stat function.
$fd = POSIX::open( "foo", &POSIX::O_RDONLY ); @stats = POSIX::fstat( $fd );
IO::Seekable::tell instead.
fwrite is C-specific--use print instead.
labs is C-specific, use abs instead.
ldiv is C-specific, use / and int instead.
The database for the de (Deutsch or German) locale.
$loc = POSIX::setlocale( &POSIX::LC_ALL, "de" );
print "Locale = $loc\n";
$lconv = POSIX::localeconv();
print "decimal_point = ", $lconv->{decimal_point}, "\n";
print "thousands_sep = ", $lconv->{thousands_sep}, "\n";
print "grouping = ", $lconv->{grouping}, "\n";
print "int_curr_symbol = ", $lconv->{int_curr_symbol}, "\n";
print "currency_symbol = ", $lconv->{currency_symbol}, "\n";
print "mon_decimal_point = ", $lconv->{mon_decimal_point}, "\n";
print "mon_thousands_sep = ", $lconv->{mon_thousands_sep}, "\n";
print "mon_grouping = ", $lconv->{mon_grouping}, "\n";
print "positive_sign = ", $lconv->{positive_sign}, "\n";
print "negative_sign = ", $lconv->{negative_sign}, "\n";
print "int_frac_digits = ", $lconv->{int_frac_digits}, "\n";
print "frac_digits = ", $lconv->{frac_digits}, "\n";
print "p_cs_precedes = ", $lconv->{p_cs_precedes}, "\n";
print "p_sep_by_space = ", $lconv->{p_sep_by_space}, "\n";
print "n_cs_precedes = ", $lconv->{n_cs_precedes}, "\n";
print "n_sep_by_space = ", $lconv->{n_sep_by_space}, "\n";
print "p_sign_posn = ", $lconv->{p_sign_posn}, "\n";
print "n_sign_posn = ", $lconv->{n_sign_posn}, "\n";
longjmp is C-specific: use die instead.
POSIX::open.
$fd = POSIX::open( "foo", &POSIX::O_RDONLY ); $off_t = POSIX::lseek( $fd, 0, &POSIX::SEEK_SET );
Returns undef on failure.
malloc is C-specific.
memchr is C-specific, use index instead.
memcmp is C-specific, use eq instead.
memcpy is C-specific, use = instead.
memmove is C-specific, use = instead.
memset is C-specific, use x instead.
Returns undef on failure.
Synopsis:
mktime(sec, min, hour, mday, mon, year, wday = 0, yday = 0, isdst = 0)
The month (mon), weekday (wday), and yearday (yday) begin at zero. I.e. January is 0, not 1; Sunday is 0, not 1; January 1st
is 0, not 1. The year (year) is given in years since 1900. I.e. The year 1995 is 95; the year 2001 is
101. Consult your system's mktime manpage for details about these and the other arguments.
Calendar time for December 12, 1995, at 10:30 am.
$time_t = POSIX::mktime( 0, 30, 10, 12, 11, 95 ); print "Date = ", POSIX::ctime($time_t);
Returns undef on failure.
($fractional, $integral) = POSIX::modf( 3.14 );
Returns undef on failure.
offsetof is C-specific.
POSIX::close to close the file.
Open a file read-only with mode 0666.
$fd = POSIX::open( "foo" );
Open a file for read and write.
$fd = POSIX::open( "foo", &POSIX::O_RDWR );
Open a file for write, with truncation.
$fd = POSIX::open( "foo", &POSIX::O_WRONLY | &POSIX::O_TRUNC );
Create a new file with mode 0640. Set up the file for writing.
$fd = POSIX::open( "foo", &POSIX::O_CREAT | &POSIX::O_WRONLY, 0640 );
Returns undef on failure.
$dir = POSIX::opendir( "/tmp" ); @files = POSIX::readdir( $dir ); POSIX::closedir( $dir );
Returns undef on failure.
The following will determine the maximum length of the longest allowable
pathname on the filesystem which holds /tmp.
$path_max = POSIX::pathconf( "/tmp", &POSIX::_PC_PATH_MAX );
Returns undef on failure.
Returns undef on failure.
POSIX::open.
($fd0, $fd1) = POSIX::pipe(); POSIX::write( $fd0, "hello", 5 ); POSIX::read( $fd1, $buf, 5 );
$x raised to the power $exponent.
$ret = POSIX::pow( $x, $exponent );
putc is C-specific--use print instead.
putchar is C-specific--use print instead.
puts is C-specific--use print instead.
qsort is C-specific, use sort instead.
rand is non-portable, use Perl's rand instead.
POSIX::open. If the buffer $buf is not large enough for the read then Perl will extend it to make room for
the request.
$fd = POSIX::open( "foo", &POSIX::O_RDONLY ); $bytes = POSIX::read( $fd, $buf, 3 );
Returns undef on failure.
realloc is C-specific.
scanf is C-specific--use <> and regular expressions
instead.
setjmp is C-specific: use eval {} instead.
The following will set the traditional UNIX system locale behavior (the
second argument "C").
$loc = POSIX::setlocale( &POSIX::LC_ALL, "C" );
The following will query (the missing second argument) the current LC_CTYPE category.
$loc = POSIX::setlocale( &POSIX::LC_CTYPE);
The following will set the LC_CTYPE behaviour according to the locale
environment variables (the second argument ""). Please see your systems setlocale(3) documentation for the locale environment variables' meaning or consult the perllocale manpage.
$loc = POSIX::setlocale( &POSIX::LC_CTYPE, "");
The following will set the LC_COLLATE behaviour to Argentinian Spanish. NOTE: The naming and availability of locales depends on your operating system. Please consult the perllocale manpage for how to find out which locales are available in your system.
$loc = POSIX::setlocale( &POSIX::LC_ALL, "es_AR.ISO8859-1" );
Returns undef on failure.
POSIX::SigAction objects for the
action and oldaction arguments. Consult your system's sigaction
manpage for details.
Synopsis:
sigaction(sig, action, oldaction = 0)
Returns undef on failure.
siglongjmp is C-specific: use die instead.
POSIX::SigSet
objects for the sigset argument. Consult your system's sigpending
manpage for details.
Synopsis:
sigpending(sigset)
Returns undef on failure.
POSIX::SigSet objects for the sigset and oldsigset arguments. Consult your system's sigprocmask manpage for details.
Synopsis:
sigprocmask(how, sigset, oldsigset = 0)
Returns undef on failure.
sigsetjmp is C-specific: use eval {} instead.
POSIX::SigSet objects for the signal_mask argument. Consult your system's sigsuspend manpage for details.
Synopsis:
sigsuspend(signal_mask)
Returns undef on failure.
srand.
sscanf is C-specific--use regular expressions instead.
strcat is C-specific, use .= instead.
strchr is C-specific, use index instead.
strcmp is C-specific, use eq instead.
strcpy is C-specific, use = instead.
strcspn is C-specific, use regular expressions instead.
Synopsis:
strftime(fmt, sec, min, hour, mday, mon, year, wday = 0, yday = 0, isdst = 0)
The month (mon), weekday (wday), and yearday (yday) begin at zero. I.e. January is 0, not 1; Sunday is 0, not 1; January 1st
is 0, not 1. The year (year) is given in years since 1900. I.e. The year 1995 is 95; the year 2001 is
101. Consult your system's strftime manpage for details about these and the other arguments.
The string for Tuesday, December 12, 1995.
$str = POSIX::strftime( "%A, %B %d, %Y", 0, 0, 0, 12, 11, 95, 2 ); print "$str\n";
strlen is C-specific, use length instead.
strncat is C-specific, use .= instead.
strncmp is C-specific, use eq instead.
strncpy is C-specific, use = instead.
stroul is C-specific.
strpbrk is C-specific.
strrchr is C-specific, use rindex instead.
strspn is C-specific.
strtod should respect any POSIX setlocale() settings.
To parse a string $str as a floating point number use
$! = 0;
($num, $n_unparsed) = POSIX::strtod($str);
The second returned item and $! can be used to check for valid input:
if (($str eq '') || ($n_unparsed != 0) || !$!) {
die "Non-numeric input $str" . $! ? ": $!\n" : "\n";
}
When called in a scalar context strtod returns the parsed number.
strtok is C-specific.
strtol should respect any POSIX setlocale() settings.
To parse a string $str as a number in some base
$base use
$! = 0;
($num, $n_unparsed) = POSIX::strtol($str, $base);
The base should be zero or between 2 and 36, inclusive. When the base is zero or omitted strtol will use the string itself to determine the base: a leading ``0x'' or ``0X'' means hexadecimal; a leading ``0'' means octal; any other leading characters mean decimal. Thus, ``1234'' is parsed as a decimal number, ``01234'' as an octal number, and ``0x1234'' as a hexadecimal number.
The second returned item and $! can be used to check for valid input:
if (($str eq '') || ($n_unparsed != 0) || !$!) {
die "Non-numeric input $str" . $! ? ": $!\n" : "\n";
}
When called in a scalar context strtol returns the parsed number.
Note: Some vendors supply strtod and strtol but not strtoul. Other vendors that do suply strtoul parse ``-1'' as a valid value.
$dst = POSIX::strxfrm( $src );
The following will get the machine's clock speed.
$clock_ticks = POSIX::sysconf( &POSIX::_SC_CLK_TCK );
Returns undef on failure.
Returns undef on failure.
Returns undef on failure.
Returns undef on failure.
Returns undef on failure.
Returns undef on failure.
times function returns elapsed realtime since some point
in the past (such as system startup), user and system times for this
process, and user and system times used by child processes. All times are
returned in clock ticks.
($realtime, $user, $system, $cuser, $csystem) = POSIX::times();
Note: Perl's builtin times function returns four values, measured in seconds.
IO::File::new_tmpfile instead.
$tmpfile = POSIX::tmpnam();
POSIX::tzset(); ($std, $dst) = POSIX::tzname();
($sysname, $nodename, $release, $version, $machine ) = POSIX::uname();
IO::Handle::ungetc instead.
vfprintf is C-specific.
vprintf is C-specific.
vsprintf is C-specific.
$pid = POSIX::waitpid( -1, &POSIX::WNOHANG ); print "status = ", ($? / 256), "\n";
POSIX::open.
$fd = POSIX::open( "foo", &POSIX::O_WRONLY ); $buf = "hello"; $bytes = POSIX::write( $b, $buf, 5 );
Returns undef on failure.
POSIX::SigAction object which corresponds to the C
struct sigaction. This object will be destroyed automatically when it is no longer needed.
The first parameter is the fully-qualified name of a sub which is a
signal-handler. The second parameter is a POSIX::SigSet
object, it defaults to the empty set. The third parameter contains the
sa_flags, it defaults to 0.
$sigset = POSIX::SigSet->new(SIGINT, SIGQUIT); $sigaction = POSIX::SigAction->new( 'main::handler', $sigset, &POSIX::SA_NOCLDSTOP );
This POSIX::SigAction object should be used with the POSIX::sigaction
function.
Create an empty set.
$sigset = POSIX::SigSet->new;
Create a set with SIGUSR1.
$sigset = POSIX::SigSet->new( &POSIX::SIGUSR1 );
$sigset->addset( &POSIX::SIGUSR2 );
Returns undef on failure.
$sigset->delset( &POSIX::SIGUSR2 );
Returns undef on failure.
$sigset->emptyset();
Returns undef on failure.
$sigset->fillset();
Returns undef on failure.
if( $sigset->ismember( &POSIX::SIGUSR1 ) ){
print "contains SIGUSR1\n";
}
$termios = POSIX::Termios->new;
Obtain the attributes for stdin.
$termios->getattr()
Obtain the attributes for stdout.
$termios->getattr( 1 )
Returns undef on failure.
$c_cc[1] = $termios->getcc(1);
$c_cflag = $termios->getcflag;
$c_iflag = $termios->getiflag;
$ispeed = $termios->getispeed;
$c_lflag = $termios->getlflag;
$c_oflag = $termios->getoflag;
$ospeed = $termios->getospeed;
Set attributes immediately for stdout.
$termios->setattr( 1, &POSIX::TCSANOW );
Returns undef on failure.
$termios->setcc( &POSIX::VEOF, 1 );
$termios->setcflag( &POSIX::CLOCAL );
$termios->setiflag( &POSIX::BRKINT );
$termios->setispeed( &POSIX::B9600 );
Returns undef on failure.
$termios->setlflag( &POSIX::ECHO );
$termios->setoflag( &POSIX::OPOST );
$termios->setospeed( &POSIX::B9600 );
Returns undef on failure.