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.