=head1 NAME POSIX - Perl interface to IEEE Std 1003.1 =head1 SYNOPSIS 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 =head1 DESCRIPTION The POSIX module permits you to access all (or nearly all) the standard POSIX 1003.1 identifiers. Many of these identifiers have been given Perl-ish interfaces. Things which are C 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 L 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. =head1 NOTE The POSIX module is probably the most complex Perl module supplied with the standard distribution. It incorporates autoloading, namespace games, and dynamic loading of code that's in Perl, C, or both. It's a great source of wisdom. =head1 CAVEATS A few functions are not implemented because they are C specific. If you attempt to call these, they will print a message telling you that they aren't implemented, and suggest using the Perl equivalent should one exist. For example, trying to access the 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(2) 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. =head1 FUNCTIONS =over 8 =item _exit This is identical to the C function C<_exit>. =item abort This is identical to the C function C. =item abs This is identical to Perl's builtin C function. =item access Determines the accessibility of a file. if( POSIX::access( "/", &POSIX::R_OK ) ){ print "have read permission\n"; } Returns C on failure. =item acos This is identical to the C function C. =item alarm This is identical to Perl's builtin C function. =item asctime This is identical to the C function C. =item asin This is identical to the C function C. =item assert Unimplemented. =item atan This is identical to the C function C. =item atan2 This is identical to Perl's builtin C function. =item atexit atexit() is C-specific: use END {} instead. =item atof atof() is C-specific. =item atoi atoi() is C-specific. =item atol atol() is C-specific. =item bsearch bsearch() not supplied. =item calloc calloc() is C-specific. =item ceil This is identical to the C function C. =item chdir This is identical to Perl's builtin C function. =item chmod This is identical to Perl's builtin C function. =item chown This is identical to Perl's builtin C function. =item clearerr Use method C<:handle::clearerr> instead. =item clock This is identical to the C function C. =item close Close the file. This uses file descriptors such as those obtained by calling C<:open>. $fd = POSIX::open( "foo", &POSIX::O_RDONLY ); POSIX::close( $fd ); Returns C on failure. =item closedir This is identical to Perl's builtin C function. =item cos This is identical to Perl's builtin C function. =item cosh This is identical to the C function C. =item creat Create a new file. This returns a file descriptor like the ones returned by C<:open>. Use C<:close> to close the file. $fd = POSIX::creat( "foo", 0611 ); POSIX::close( $fd ); =item ctermid Generates the path name for the controlling terminal. $path = POSIX::ctermid(); =item ctime This is identical to the C function C. =item cuserid Get the character login name of the user. $name = POSIX::cuserid(); =item difftime This is identical to the C function C. =item div div() is C-specific. =item dup This is similar to the C function C. This uses file descriptors such as those obtained by calling C<:open>. Returns C on failure. =item dup2 This is similar to the C function C. This uses file descriptors such as those obtained by calling C<:open>. Returns C on failure. =item errno Returns the value of errno. $errno = POSIX::errno(); =item execl execl() is C-specific. =item execle execle() is C-specific. =item execlp execlp() is C-specific. =item execv execv() is C-specific. =item execve execve() is C-specific. =item execvp execvp() is C-specific. =item exit This is identical to Perl's builtin C function. =item exp This is identical to Perl's builtin C function. =item fabs This is identical to Perl's builtin C function. =item fclose Use method C<:handle::close> instead. =item fcntl This is identical to Perl's builtin C function. =item fdopen Use method C<:handle::new_from_fd> instead. =item feof Use method C<:handle::eof> instead. =item ferror Use method C<:handle::error> instead. =item fflush Use method C<:handle::flush> instead. =item fgetc Use method C<:handle::getc> instead. =item fgetpos Use method C<:seekable::getpos> instead. =item fgets Use method C<:handle::gets> instead. =item fileno Use method C<:handle::fileno> instead. =item floor This is identical to the C function C. =item fmod This is identical to the C function C. =item fopen Use method C<:file::open> instead. =item fork This is identical to Perl's builtin C function. =item fpathconf Retrieves the value of a configurable limit on a file or directory. This uses file descriptors such as those obtained by calling C<:open>. The following will determine the maximum length of the longest allowable pathname on the filesystem which holds C. $fd = POSIX::open( "/tmp/foo", &POSIX::O_RDONLY ); $path_max = POSIX::fpathconf( $fd, &POSIX::_PC_PATH_MAX ); Returns C on failure. =item fprintf fprintf() is C-specific--use printf instead. =item fputc fputc() is C-specific--use print instead. =item fputs fputs() is C-specific--use print instead. =item fread fread() is C-specific--use read instead. =item free free() is C-specific. =item freopen freopen() is C-specific--use open instead. =item frexp Return the mantissa and exponent of a floating-point number. ($mantissa, $exponent) = POSIX::frexp( 3.14 ); =item fscanf fscanf() is C-specific--use and regular expressions instead. =item fseek Use method C<:seekable::seek> instead. =item fsetpos Use method C<:seekable::setpos> instead. =item fstat Get file status. This uses file descriptors such as those obtained by calling C<:open>. The data returned is identical to the data from Perl's builtin C function. $fd = POSIX::open( "foo", &POSIX::O_RDONLY ); @stats = POSIX::fstat( $fd ); =item ftell Use method C<:seekable::tell> instead. =item fwrite fwrite() is C-specific--use print instead. =item getc This is identical to Perl's builtin C function. =item getchar Returns one character from STDIN. =item getcwd Returns the name of the current working directory. =item getegid Returns the effective group id. =item getenv Returns the value of the specified enironment variable. =item geteuid Returns the effective user id. =item getgid Returns the user's real group id. =item getgrgid This is identical to Perl's builtin C function. =item getgrnam This is identical to Perl's builtin C function. =item getgroups Returns the ids of the user's supplementary groups. =item getlogin This is identical to Perl's builtin C function. =item getpgrp This is identical to Perl's builtin C function. =item getpid Returns the process's id. =item getppid This is identical to Perl's builtin C function. =item getpwnam This is identical to Perl's builtin C function. =item getpwuid This is identical to Perl's builtin C function. =item gets Returns one line from STDIN. =item getuid Returns the user's id. =item gmtime This is identical to Perl's builtin C function. =item isalnum This is identical to the C function, except that it can apply to a single character or to a whole string. =item isalpha This is identical to the C function, except that it can apply to a single character or to a whole string. =item isatty Returns a boolean indicating whether the specified filehandle is connected to a tty. =item iscntrl This is identical to the C function, except that it can apply to a single character or to a whole string. =item isdigit This is identical to the C function, except that it can apply to a single character or to a whole string. =item isgraph This is identical to the C function, except that it can apply to a single character or to a whole string. =item islower This is identical to the C function, except that it can apply to a single character or to a whole string. =item isprint This is identical to the C function, except that it can apply to a single character or to a whole string. =item ispunct This is identical to the C function, except that it can apply to a single character or to a whole string. =item isspace This is identical to the C function, except that it can apply to a single character or to a whole string. =item isupper This is identical to the C function, except that it can apply to a single character or to a whole string. =item isxdigit This is identical to the C function, except that it can apply to a single character or to a whole string. =item kill This is identical to Perl's builtin C function. =item labs labs() is C-specific, use abs instead. =item ldexp This is identical to the C function C. =item ldiv ldiv() is C-specific, use / and int instead. =item link This is identical to Perl's builtin C function. =item localeconv Get numeric formatting information. Returns a reference to a hash containing the current locale formatting values. The database for the B (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"; =item localtime This is identical to Perl's builtin C function. =item log This is identical to Perl's builtin C function. =item log10 This is identical to the C function C. =item longjmp longjmp() is C-specific: use die instead. =item lseek Move the file's read/write position. This uses file descriptors such as those obtained by calling C<:open>. $fd = POSIX::open( "foo", &POSIX::O_RDONLY ); $off_t = POSIX::lseek( $fd, 0, &POSIX::SEEK_SET ); Returns C on failure. =item malloc malloc() is C-specific. =item mblen This is identical to the C function C. =item mbstowcs This is identical to the C function C. =item mbtowc This is identical to the C function C. =item memchr memchr() is C-specific, use index() instead. =item memcmp memcmp() is C-specific, use eq instead. =item memcpy memcpy() is C-specific, use = instead. =item memmove memmove() is C-specific, use = instead. =item memset memset() is C-specific, use x instead. =item mkdir This is identical to Perl's builtin C function. =item mkfifo This is similar to the C function C. Returns C on failure. =item mktime Convert date/time info to a calendar time. Synopsis: mktime(sec, min, hour, mday, mon, year, wday = 0, yday = 0, isdst = 0) The month (C), weekday (C), and yearday (C) begin at zero. I.e. January is 0, not 1; Sunday is 0, not 1; January 1st is 0, not 1. The year (C) is given in years since 1900. I.e. The year 1995 is 95; the year 2001 is 101. Consult your system's C 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 C on failure. =item modf Return the integral and fractional parts of a floating-point number. ($fractional, $integral) = POSIX::modf( 3.14 ); =item nice This is similar to the C function C. Returns C on failure. =item offsetof offsetof() is C-specific. =item open Open a file for reading for writing. This returns file descriptors, not Perl filehandles. Use C<: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 C on failure. =item opendir Open a directory for reading. $dir = POSIX::opendir( "/tmp" ); @files = POSIX::readdir( $dir ); POSIX::closedir( $dir ); Returns C on failure. =item pathconf Retrieves the value of a configurable limit on a file or directory. The following will determine the maximum length of the longest allowable pathname on the filesystem which holds C. $path_max = POSIX::pathconf( "/tmp", &POSIX::_PC_PATH_MAX ); Returns C on failure. =item pause This is similar to the C function C. Returns C on failure. =item perror This is identical to the C function C. =item pipe Create an interprocess channel. This returns file descriptors like those returned by C<:open>. ($fd0, $fd1) = POSIX::pipe(); POSIX::write( $fd0, "hello", 5 ); POSIX::read( $fd1, $buf, 5 ); =item pow Computes $x raised to the power $exponent. $ret = POSIX::pow( $x, $exponent ); =item printf Prints the specified arguments to STDOUT. =item putc putc() is C-specific--use print instead. =item putchar putchar() is C-specific--use print instead. =item puts puts() is C-specific--use print instead. =item qsort qsort() is C-specific, use sort instead. =item raise Sends the specified signal to the current process. =item rand rand() is non-portable, use Perl's rand instead. =item read Read from a file. This uses file descriptors such as those obtained by calling C<:open>. If the buffer C 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 C on failure. =item readdir This is identical to Perl's builtin C function. =item realloc realloc() is C-specific. =item remove This is identical to Perl's builtin C function. =item rename This is identical to Perl's builtin C function. =item rewind Seeks to the beginning of the file. =item rewinddir This is identical to Perl's builtin C function. =item rmdir This is identical to Perl's builtin C function. =item scanf scanf() is C-specific--use and regular expressions instead. =item setgid Sets the real group id for this process. =item setjmp setjmp() is C-specific: use eval {} instead. =item setlocale Modifies and queries program's locale. 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 C). Please see your systems L documentation for the locale environment variables' meaning or consult L. $loc = POSIX::setlocale( &POSIX::LC_CTYPE, ""); The following will set the LC_COLLATE behaviour to Argentinian Spanish. B: The naming and availability of locales depends on your operating system. Please consult L for how to find out which locales are available in your system. $loc = POSIX::setlocale( &POSIX::LC_ALL, "es_AR.ISO8859-1" ); =item setpgid This is similar to the C function C. Returns C on failure. =item setsid This is identical to the C function C. =item setuid Sets the real user id for this process. =item sigaction Detailed signal management. This uses C<:sigaction> objects for the C and C arguments. Consult your system's C manpage for details. Synopsis: sigaction(sig, action, oldaction = 0) Returns C on failure. =item siglongjmp siglongjmp() is C-specific: use die instead. =item sigpending Examine signals that are blocked and pending. This uses C<:sigset> objects for the C argument. Consult your system's C manpage for details. Synopsis: sigpending(sigset) Returns C on failure. =item sigprocmask Change and/or examine calling process's signal mask. This uses C<:sigset> objects for the C and C arguments. Consult your system's C manpage for details. Synopsis: sigprocmask(how, sigset, oldsigset = 0) Returns C on failure. =item sigsetjmp sigsetjmp() is C-specific: use eval {} instead. =item sigsuspend Install a signal mask and suspend process until signal arrives. This uses C<:sigset> objects for the C argument. Consult your system's C manpage for details. Synopsis: sigsuspend(signal_mask) Returns C on failure. =item sin This is identical to Perl's builtin C function. =item sinh This is identical to the C function C. =item sleep This is identical to Perl's builtin C function. =item sprintf This is identical to Perl's builtin C function. =item sqrt This is identical to Perl's builtin C function. =item srand srand(). =item sscanf sscanf() is C-specific--use regular expressions instead. =item stat This is identical to Perl's builtin C function. =item strcat strcat() is C-specific, use .= instead. =item strchr strchr() is C-specific, use index() instead. =item strcmp strcmp() is C-specific, use eq instead. =item strcoll This is identical to the C function C. =item strcpy strcpy() is C-specific, use = instead. =item strcspn strcspn() is C-specific, use regular expressions instead. =item strerror Returns the error string for the specified errno. =item strftime Convert date and time information to string. Returns the string. Synopsis: strftime(fmt, sec, min, hour, mday, mon, year, wday = -1, yday = -1, isdst = -1) The month (C), weekday (C), and yearday (C) begin at zero. I.e. January is 0, not 1; Sunday is 0, not 1; January 1st is 0, not 1. The year (C) is given in years since 1900. I.e., the year 1995 is 95; the year 2001 is 101. Consult your system's C manpage for details about these and the other arguments. The given arguments are made consistent by calling C before calling your system's C function. The string for Tuesday, December 12, 1995. $str = POSIX::strftime( "%A, %B %d, %Y", 0, 0, 0, 12, 11, 95, 2 ); print "$str\n"; =item strlen strlen() is C-specific, use length instead. =item strncat strncat() is C-specific, use .= instead. =item strncmp strncmp() is C-specific, use eq instead. =item strncpy strncpy() is C-specific, use = instead. =item stroul stroul() is C-specific. =item strpbrk strpbrk() is C-specific. =item strrchr strrchr() is C-specific, use rindex() instead. =item strspn strspn() is C-specific. =item strstr This is identical to Perl's builtin C function. =item strtod String to double translation. Returns the parsed number and the number of characters in the unparsed portion of the string. Truly POSIX-compliant systems set $! ($ERRNO) to indicate a translation error, so clear $! before calling strtod. However, non-POSIX systems may not check for overflow, and therefore will never set $!. strtod should respect any POSIX I 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. =item strtok strtok() is C-specific. =item strtol String to (long) integer translation. Returns the parsed number and the number of characters in the unparsed portion of the string. Truly POSIX-compliant systems set $! ($ERRNO) to indicate a translation error, so clear $! before calling strtol. However, non-POSIX systems may not check for overflow, and therefore will never set $!. strtol should respect any POSIX I 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. =item strtoul String to unsigned (long) integer translation. strtoul is identical to strtol except that strtoul only parses unsigned integers. See I for details. Note: Some vendors supply strtod and strtol but not strtoul. Other vendors that do suply strtoul parse "-1" as a valid value. =item strxfrm String transformation. Returns the transformed string. $dst = POSIX::strxfrm( $src ); =item sysconf Retrieves values of system configurable variables. The following will get the machine's clock speed. $clock_ticks = POSIX::sysconf( &POSIX::_SC_CLK_TCK ); Returns C on failure. =item system This is identical to Perl's builtin C function. =item tan This is identical to the C function C. =item tanh This is identical to the C function C. =item tcdrain This is similar to the C function C. Returns C on failure. =item tcflow This is similar to the C function C. Returns C on failure. =item tcflush This is similar to the C function C. Returns C on failure. =item tcgetpgrp This is identical to the C function C. =item tcsendbreak This is similar to the C function C. Returns C on failure. =item tcsetpgrp This is similar to the C function C. Returns C on failure. =item time This is identical to Perl's builtin C