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: $fd is a filedescriptor, *NOT* a file handle

*****

$sigset = POSIX::SigSet->new;

$sigaction = POSIX::SigAction->new('main::handler', $sigset,

                 &POSIX::SA_NOCLDSTOP);

*****

$sigset = POSIX::SigSet->new;

*****

$sigset = POSIX::SigSet->new(&POSIX::SIGUSR1);

*****

$sigset->addset(&POSIX::SIGUSR2);

*****

$sigset->delset(&POSIX::SIGUSR2);

*****

$sigset->emptyset();

*****

$sigset->fillset();

*****

if ($sigset->ismember(&POSIX::SIGUSR1 ) ){

    print "contains SIGUSR1\n";

}

*****

$termios = POSIX::Termios->new;

*****

$termios->getattr()

*****

$termios->getattr(1)

*****

$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;

*****

$termios->setattr(1, &POSIX::TCSANOW);

*****

$termios->setcc(1, &POSIX::VEOF);

*****

$termios->setcflag(&POSIX::CLOCAL);

*****

$termios->setiflag(&POSIX::BRKINT);

*****

$termios->setispeed(&POSIX::B9600);

*****

$termios->setlflag(&POSIX::ECHO);

*****

$termios->setoflag(&POSIX::OPOST);

*****

$termios->setospeed(&POSIX::B9600);

*****

#!/usr/bin/perl -w

use strict;

$| = 1;

for (1..4) {

    my $got;

    print "gimme: ";

    $got = getone();

    print "--> $got\n";

}

exit;



BEGIN {

    use POSIX qw(:termios_h);



    my ($term, $oterm, $echo, $noecho, $fd_stdin);



    $fd_stdin = fileno(STDIN);



    $term     = POSIX::Termios->new();

    $term->getattr($fd_stdin);

    $oterm     = $term->getlflag();



    $echo     = ECHO | ECHOK | ICANON;

    $noecho   = $oterm & ~$echo;



    sub cbreak {

        $term->setlflag($noecho);

        $term->setcc(VTIME, 1);

        $term->setattr($fd_stdin, TCSANOW);

    }



    sub cooked {

        $term->setlflag($oterm);

        $term->setcc(VTIME, 0);

        $term->setattr($fd_stdin, TCSANOW);

    }



    sub getone {

        my $key = '';

        cbreak();

        sysread(STDIN, $key, 1);

        cooked();

        return $key;

    }



}



END { cooked() }

*****

if (POSIX::access("/", &POSIX::R_OK ) ){

    print "have read permission\n";

}

*****

$fd = POSIX::open("foo", &POSIX::O_RDONLY);

POSIX::close($fd);

*****

$fd = POSIX::creat("foo", 0611);

POSIX::close($fd);

*****

$path = POSIX::ctermid();

*****

$name = POSIX::cuserid();

*****

$errno = POSIX::errno();

*****

$fd = POSIX::open("/tmp/foo", &POSIX::O_RDONLY);

$path_max = POSIX::fpathconf($fd, &POSIX::_PC_PATH_MAX);

*****

($mantissa, $exponent) = POSIX::frexp(3.14);

*****

$fd = POSIX::open("foo", &POSIX::O_RDONLY);

@stats = POSIX::fstat($fd);

*****

$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";

*****

$fd = POSIX::open("foo", &POSIX::O_RDONLY);

$off_t = POSIX::lseek($fd, 0, &POSIX::SEEK_SET);

*****

mktime(sec, min, hour, mday, mon, year, wday = 0,

                                     yday = 0, isdst = 0)

*****

$time_t = POSIX::mktime(0, 30, 10, 12, 11, 95);

print "Date = ", POSIX::ctime($time_t);

*****

($fractional, $integral) = POSIX::modf(3.14);

*****

$fd = POSIX::open("foo");

*****

$fd = POSIX::open("foo", &POSIX::O_RDWR);

*****

$fd = POSIX::open("foo", &POSIX::O_WRONLY | &POSIX::O_TRUNC);

*****

$fd = POSIX::open("foo", &POSIX::O_CREAT | &POSIX::O_WRONLY, 0644);

*****

$dir = POSIX::opendir("/tmp");

@files = POSIX::readdir($dir);

POSIX::closedir($dir);

*****

$path_max = POSIX::pathconf("/tmp", &POSIX::_PC_PATH_MAX);

*****

($fd0, $fd1) = POSIX::pipe();

POSIX::write($fd0, "hello", 5);

POSIX::read($fd1, $buf, 5);

*****

$ret = POSIX::pow($x, $exponent);

*****

$fd = POSIX::open("foo", &POSIX::O_RDONLY);

$bytes = POSIX::read($fd, $buf, 3);

*****

$loc = POSIX::setlocale(&POSIX::LC_ALL, "C");

*****

sigaction(sig, action, oldaction = 0)

*****

sigpending(sigset)

*****

sigprocmask(how, sigset, oldsigset = 0)

*****

sigsuspend(signal_mask)

*****

strftime(fmt, sec, min, hour, mday, mon, year, 

            wday = 0, yday = 0, isdst = 0)

*****

$str = POSIX::strftime("%A, %B %d, %Y", 0, 0, 0, 12, 

                        11, 95, 2);

print "$str\n";

*****

$dst = POSIX::strxfrm($src);

*****

$clock_ticks = POSIX::sysconf(&POSIX::_SC_CLK_TCK);

*****

($realtime, $user, $system, $cuser, $csystem) = POSIX::times();

*****

$tmpfile = POSIX::tmpnam();

*****

POSIX::tzset();

($std, $dst) = POSIX::tzname();

*****

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

*****

$pid = POSIX::waitpid(-1, &POSIX::WNOHANG);

print "status = ", ($? / 256), "\n";

*****

$fd = POSIX::open("foo", &POSIX::O_WRONLY);

$buf = "hello";

$bytes = POSIX::write($b, $buf, 5);

