perl 5.003_02: [no incremental changelog available]
[p5sagit/p5-mst-13.2.git] / ext / POSIX / mkposixman.pl
CommitLineData
760ac839 1#!/tmp/perl5 -w
2#!/tmp/perl5
3
4# Ramrodded by Dean Roehrich.
5#
6# Submissions for function descriptions are needed. Don't write a tutorial,
7# and don't repeat things that can be found in the system's manpages,
8# just give a quick 2-3 line note and a one-line example.
9#
10# Check the latest version of the Perl5 Module List for Dean's current
11# email address (listed as DMR).
12#
13my $VERS = 951129; # yymmdd
14
15local *main::XS;
16local *main::PM;
17
18open( XS, "<POSIX.xs" ) || die "Unable to open POSIX.xs";
19open( PM, "<POSIX.pm" ) || die "Unable to open POSIX.pm";
20close STDOUT;
21open( STDOUT, ">POSIX.pod" ) || die "Unable to open POSIX.pod";
22
23print <<'EOQ';
24=head1 NAME
25
26POSIX - Perl interface to IEEE Std 1003.1
27
28=head1 SYNOPSIS
29
30 use POSIX;
31 use POSIX qw(setsid);
32 use POSIX qw(:errno_h :fcntl_h);
33
34 printf "EINTR is %d\n", EINTR;
35
36 $sess_id = POSIX::setsid();
37
38 $fd = POSIX::open($path, O_CREAT|O_EXCL|O_WRONLY, 0644);
39 # note: that's a filedescriptor, *NOT* a filehandle
40
41=head1 DESCRIPTION
42
43The POSIX module permits you to access all (or nearly all) the standard
44POSIX 1003.1 identifiers. Many of these identifiers have been given Perl-ish
45interfaces. Things which are C<#defines> in C, like EINTR or O_NDELAY, are
46automatically exported into your namespace. All functions are only exported
47if you ask for them explicitly. Most likely people will prefer to use the
48fully-qualified function names.
49
50This document gives a condensed list of the features available in the POSIX
51module. Consult your operating system's manpages for general information on
52most features. Consult L<perlfunc> for functions which are noted as being
53identical to Perl's builtin functions.
54
55The first section describes POSIX functions from the 1003.1 specification.
56The second section describes some classes for signal objects, TTY objects,
57and other miscellaneous objects. The remaining sections list various
58constants and macros in an organization which roughly follows IEEE Std
591003.1b-1993.
60
61=head1 NOTE
62
63The POSIX module is probably the most complex Perl module supplied with
64the standard distribution. It incorporates autoloading, namespace games,
65and dynamic loading of code that's in Perl, C, or both. It's a great
66source of wisdom.
67
68=head1 CAVEATS
69
70A few functions are not implemented because they are C specific. If you
71attempt to call these, they will print a message telling you that they
72aren't implemented, and suggest using the Perl equivalent should one
73exist. For example, trying to access the setjmp() call will elicit the
74message "setjmp() is C-specific: use eval {} instead".
75
76Furthermore, some evil vendors will claim 1003.1 compliance, but in fact
77are not so: they will not pass the PCTS (POSIX Compliance Test Suites).
78For example, one vendor may not define EDEADLK, or the semantics of the
79errno values set by open(2) might not be quite right. Perl does not
80attempt to verify POSIX compliance. That means you can currently
81successfully say "use POSIX", and then later in your program you find
82that your vendor has been lax and there's no usable ICANON macro after
83all. This could be construed to be a bug.
84
85EOQ
86
87use strict;
88
89
90my $constants = {};
91my $macros = {};
92my $packages = [];
93my $posixpack = Package->new( 'POSIX' );
94my $descriptions = Description->new;
95
96get_constants( 'XS', $constants, $macros );
97get_functions( 'XS', $packages, $posixpack );
98get_PMfunctions( 'PM', $packages, $posixpack, $descriptions );
99
100
101# It is possible that the matches of setup_*() may depend on
102# the matches of an earlier setup_*(). If you change the order,
103# be careful that you're getting only what you want, and no more.
104#
105my $termios_flags = setup_termios( $constants );
106my $wait_stuff = setup_wait( $constants, $macros );
107my $stat = setup_file_char( $constants, $macros );
108my $port = setup_pat( $constants, '^_POSIX' );
109my $sc = setup_pat( $constants, '^_SC_' );
110my $pc = setup_pat( $constants, '^_PC_' );
111my $fcntl = setup_pat( $constants, '^([FO]_|FD_)' );
112my $sigs = setup_pat( $constants, '^(SIG|SA_)' );
113my $float = setup_pat( $constants, '^(L?DBL_|FLT_)' );
114my $locale = setup_pat( $constants, '^LC_' );
115my $stdio = setup_pat( $constants, '(^BUFSIZ$)|(^L_)|(^_IO...$)|(^EOF$)|(^FILENAME_MAX$)|(^TMP_MAX$)' );
116my $stdlib = setup_pat( $constants, '(^EXIT_)|(^MB_CUR_MAX$)|(^RAND_MAX$)' );
117my $limits = setup_pat( $constants, '(_MAX$)|(_MIN$)|(_BIT$)|(^MAX_)|(_BUF$)' );
118my $math = setup_pat( $constants, '^HUGE_VAL$' );
119my $time = setup_pat( $constants, '^CL' );
120my $unistd = setup_pat( $constants, '(_FILENO$)|(^SEEK_...$)|(^._OK$)' );
121my $errno = setup_pat( $constants, '^E' );
122
123print_posix( $posixpack, $descriptions );
124print_classes( $packages, $constants, $termios_flags, $descriptions );
125print_misc( 'Pathname Constants', $pc );
126print_misc( 'POSIX Constants', $port );
127print_misc( 'System Configuration', $sc );
128print_misc( 'Errno', $errno );
129print_misc( 'Fcntl', $fcntl );
130print_misc( 'Float', $float );
131print_misc( 'Limits', $limits );
132print_misc( 'Locale', $locale );
133print_misc( 'Math', $math );
134print_misc( 'Signal', $sigs );
135print_misc( 'Stat', $stat );
136print_misc( 'Stdlib', $stdlib );
137print_misc( 'Stdio', $stdio );
138print_misc( 'Time', $time );
139print_misc( 'Unistd', $unistd );
140print_misc( 'Wait', $wait_stuff );
141
142print_vers( $VERS );
143
144dregs( $macros, $constants );
145
146exit(0);
147
148Unimplemented.
149
150sub dregs {
151 my $macros = shift;
152 my $constants = shift;
153
154 foreach (keys %$macros){
155 warn "Unknown macro $_ in the POSIX.xs module.\n";
156 }
157 foreach (keys %$constants){
158 warn "Unknown constant $_ in the POSIX.xs module.\n";
159 }
160}
161
162sub get_constants {
163 no strict 'refs';
164 my $fh = shift;
165 my $constants = shift;
166 my $macros = shift;
167 my $v;
168
169 while(<$fh>){
170 last if /^constant/;
171 }
172 while(<$fh>){ # }{{
173 last if /^}/;
174 if( /return\s+([^;]+)/ ){
175 $v = $1;
176 # skip non-symbols
177 if( $v !~ /^\d+$/ ){
178 # remove any C casts
179 $v =~ s,\(.*?\)\s*(\w),$1,;
180 # is it a macro?
181 if( $v =~ s/(\(.*?\))// ){
182 $macros->{$v} = $1;
183 }
184 else{
185 $constants->{$v} = 1;
186 }
187 }
188 }
189 }
190}
191
192Close the file. This uses file descriptors such as those obtained by calling
193C<POSIX::open>.
194
195 $fd = POSIX::open( "foo", &POSIX::O_RDONLY );
196 POSIX::close( $fd );
197
198sub get_functions {
199 no strict 'refs';
200 my $fh = shift;
201 my $packages = shift;
202 my $posixpack = shift;
203 my $header = 0;
204 my $pack = '';
205 my $prefix = '';
206 my( $x, $y );
207 my( $curfuncs, $curpack );
208 my $ret;
209
210 while(<$fh>){
211 if( /^MODULE.*?PACKAGE\s*=\s*([^\s]+)/ ){
212 $pack = $1;
213 $prefix = '';
214 if( /PREFIX\s*=\s*([^\n]+)/ ){
215 $prefix = $1;
216 }
217 #print "package($pack) prefix($prefix)\n";
218 if( $pack eq 'POSIX' ){
219 $curpack = $posixpack;
220 }
221 else{
222 $curpack = Package->new( $pack );
223 push @$packages, $curpack;
224 }
225 $curfuncs = $curpack->curfuncs;
226 next;
227 }
228
229 chop;
230 # find function header
231 if( /^[^\s]/ && ! /^#/ ){
232 $ret = /^SysRet/ ? 2 : 1;
233 chop($x = <$fh>);
234 next if( $pack eq 'POSIX' and $x =~ /^constant/ );
235 $x =~ /^(.*?)\s*\((.*?)\)/;
236 ($x,$y) = ($1, $2); # func,sig
237 $x =~ s/^$prefix//;
238 $curfuncs->{$x} = $ret;
239 ++$header
240 }
241 # leave function header
242 else{
243 $header = 0;
244 }
245 }
246}
247
248
249sub get_PMfunctions {
250 no strict 'refs';
251 my $fh = shift;
252 my $packages = shift;
253 my $posixpack = shift;
254 my $desc = shift;
255 my $pack = '';
256 my( $curfuncs, $curpack );
257 my $y;
258 my $x;
259 my $sub = '';
260
261 # find the second package statement.
262 while(<$fh>){
263 if( /^package\s+(.*?);/ ){
264 $pack = $1;
265 last if $pack ne 'POSIX';
266 }
267 }
268
269 # Check if this package is already
270 # being used.
271 $curpack = '';
272 foreach (@$packages){
273 if( $_->name eq $pack ){
274 $curpack = $_;
275 last;
276 }
277 }
278 # maybe start a new package.
279 if( $curpack eq '' ){
280 $curpack = Package->new( $pack );
281 push @$packages, $curpack;
282 }
283 $curfuncs = $curpack->curfuncs;
284
285 # now fetch functions
286 while(<$fh>){
287 if( /^package\s+(.*?);/ ){
288 $pack = $1;
289 if( $pack eq 'POSIX' ){
290 $curpack = $posixpack;
291 }
292 else{
293 # Check if this package is already
294 # being used.
295 $curpack = '';
296 foreach (@$packages){
297 if( $_->name() eq $pack ){
298 $curpack = $_;
299 last;
300 }
301 }
302 # maybe start a new package.
303 if( $curpack eq '' ){
304 $curpack = Package->new( $pack );
305 push @$packages, $curpack;
306 }
307 }
308 $curfuncs = $curpack->curfuncs;
309 next;
310 }
311 if( /^sub\s+(.*?)\s/ ){
312 $sub = $1;
313
314 # special cases
315 if( $pack eq 'POSIX::SigAction' and
316 $sub eq 'new' ){
317 $curfuncs->{$sub} = 1;
318 }
319 elsif( $pack eq 'POSIX' and $sub eq 'perror' ){
320 $curfuncs->{$sub} = 1;
321 }
322
323 next;
324 }
325 if( /usage.*?\((.*?)\)/ ){
326 $y = $1;
327 $curfuncs->{$sub} = 1;
328 next;
329 }
330 if( /^\s+unimpl\s+"(.*?)"/ ){
331 $y = $1;
332 $y =~ s/, stopped//;
333 $desc->append( $pack, $sub, $y );
334 $curfuncs->{$sub} = 1;
335 next;
336 }
337 if( /^\s+redef\s+"(.*?)"/ ){
338 $x = $1;
339 $y = "Use method C<$x> instead";
340 $desc->append( $pack, $sub, $y );
341 $curfuncs->{$sub} = 1;
342 next;
343 }
344 }
345}
346
347Retrieves the value of a configurable limit on a file or directory. This
348uses file descriptors such as those obtained by calling C<POSIX::open>.
349
350The following will determine the maximum length of the longest allowable
351pathname on the filesystem which holds C</tmp/foo>.
352
353 $fd = POSIX::open( "/tmp/foo", &POSIX::O_RDONLY );
354 $path_max = POSIX::fpathconf( $fd, &POSIX::_PC_PATH_MAX );
355Return the mantissa and exponent of a floating-point number.
356
357 ($mantissa, $exponent) = POSIX::frexp( 3.14 );
358Get file status. This uses file descriptors such as those obtained by
359calling C<POSIX::open>. The data returned is identical to the data from
360Perl's builtin C<stat> function.
361
362 $fd = POSIX::open( "foo", &POSIX::O_RDONLY );
363 @stats = POSIX::fstat( $fd );
364
365sub print_posix {
366 my $pack = shift;
367 my $desc = shift;
368
369 print "=head1 FUNCTIONS\n\n";
370 print "=over 8\n\n";
371 dumpfuncs( $pack, $desc );
372 print "=back\n\n";
373}
374
375sub print_classes {
376 my $packages = shift;
377 my $constants = shift;
378 my $termios = shift;
379 my $desc = shift;
380 my $pack;
381 my @pkgs;
382
383 print "=head1 CLASSES\n\n";
384 @pkgs = sort { $main::a->name() cmp $main::b->name() } @$packages;
385 while( @pkgs ){
386 $pack = shift @pkgs;
387 print "=head2 ", $pack->name(), "\n\n";
388 print "=over 8\n\n";
389
390 dumpfuncs( $pack, $desc );
391
392 if( $pack->name() =~ /termios/i ){
393 dumpflags( $termios );
394 }
395 print "=back\n\n";
396 }
397}
398
399sub setup_termios {
400 my $constants = shift;
401 my $obj;
402
403 $obj = {
404 'c_iflag field' => [qw( BRKINT ICRNL IGNBRK IGNCR IGNPAR
405 INLCR INPCK ISTRIP IXOFF IXON
406 PARMRK )],
407 'c_oflag field' => [qw( OPOST )],
408 'c_cflag field' => [qw( CLOCAL CREAD CSIZE CS5 CS6 CS7 CS8
409 CSTOPB HUPCL PARENB PARODD )],
410 'c_lflag field' => [qw( ECHO ECHOE ECHOK ECHONL ICANON
411 IEXTEN ISIG NOFLSH TOSTOP )],
412 'c_cc field' => [qw( VEOF VEOL VERASE VINTR VKILL VQUIT
413 VSUSP VSTART VSTOP VMIN VTIME NCCS )],
414 'Baud rate' => [],
415 'Terminal interface' => [],
416 };
417 # look for baud rates in constants, add to termios
418 foreach (keys %$constants){
419 if( /^B\d+$/ ){
420 push @{$obj->{'Baud rate'}}, $_;
421 }
422 }
423 # look for TC* in constants, add to termios
424 foreach (keys %$constants){
425 if( /^TC/ ){
426 push @{$obj->{'Terminal interface'}}, $_;
427 }
428 }
429 # trim the constants
430 foreach (keys %$obj){
431 trim_hash( 'Constant', $obj->{$_}, $constants );
432 }
433 return $obj;
434}
435
436
437sub dumpfuncs {
438 my $pack = shift;
439 my $desc = shift;
440 my $curfuncs = $pack->curfuncs;
441 my $pname = $pack->name;
442 my $func;
443 my @funcs = sort keys %$curfuncs;
444
445 if( exists $curfuncs->{'new'} ){ # do new first
446 @funcs = grep( $_ ne 'new', @funcs );
447 unshift @funcs, 'new';
448 }
449 while( @funcs ){
450 $func = shift @funcs;
451 if( $func eq 'DESTROY' ){
452 next; # don't do DESTROY
453 }
454 print "=item $func\n\n";
455 if( $desc->print( $pname, $func, $curfuncs->{$func} ) ){
456 # if it was printed, note that
457 delete $curfuncs->{$func};
458 }
459 }
460}
461
462sub dumpflags {
463 my $flags = shift;
464 my $field;
465
466 foreach $field (sort keys %$flags){
467 print "=item $field values\n\n";
468 print join( ' ', @{$flags->{$field}} ), "\n\n";
469 }
470}
471
472sub setup_wait {
473 my $constants = shift;
474 my $macros = shift;
475 my $obj;
476
477 $obj = {
478 'Macros' => [qw( WIFEXITED WEXITSTATUS WIFSIGNALED
479 WTERMSIG WIFSTOPPED WSTOPSIG )],
480 'Constants' => [qw( WNOHANG WUNTRACED )],
481 };
482 trim_hash( 'Constant', $obj->{Constants}, $constants );
483 trim_hash( 'Macro', $obj->{Macros}, $macros );
484 return $obj;
485}
486
487sub setup_file_char {
488 my $constants = shift;
489 my $macros = shift;
490 my $obj;
491
492 $obj = {
493 'Macros' => [],
494 'Constants' => [],
495 };
496 # find S_* constants and add to object.
497 foreach (sort keys %$constants){
498 if( /^S_/ ){
499 push @{$obj->{'Constants'}}, $_;
500 }
501 }
502 # find S_* macros and add to object.
503 foreach (sort keys %$macros){
504 if( /^S_/ ){
505 push @{$obj->{'Macros'}}, $_;
506 }
507 }
508 # trim the hashes
509 trim_hash( 'Constant', $obj->{Constants}, $constants );
510 trim_hash( 'Macro', $obj->{Macros}, $macros );
511 return $obj;
512}
513
514
515sub setup_pat {
516 my $constants = shift;
517 my $pat = shift;
518 my $obj;
519
520 $obj = { 'Constants' => [] };
521 foreach (sort keys %$constants){
522 if( /$pat/ ){
523 push @{$obj->{'Constants'}}, $_;
524 }
525 }
526 trim_hash( 'Constant', $obj->{Constants}, $constants );
527 return $obj;
528}
529
530Get numeric formatting information. Returns a reference to a hash
531containing the current locale formatting values.
532
533The database for the B<de> (Deutsch or German) locale.
534
535 $loc = POSIX::setlocale( &POSIX::LC_ALL, "de" );
536 print "Locale = $loc\n";
537 $lconv = POSIX::localeconv();
538 print "decimal_point = ", $lconv->{decimal_point}, "\n";
539 print "thousands_sep = ", $lconv->{thousands_sep}, "\n";
540 print "grouping = ", $lconv->{grouping}, "\n";
541 print "int_curr_symbol = ", $lconv->{int_curr_symbol}, "\n";
542 print "currency_symbol = ", $lconv->{currency_symbol}, "\n";
543 print "mon_decimal_point = ", $lconv->{mon_decimal_point}, "\n";
544 print "mon_thousands_sep = ", $lconv->{mon_thousands_sep}, "\n";
545 print "mon_grouping = ", $lconv->{mon_grouping}, "\n";
546 print "positive_sign = ", $lconv->{positive_sign}, "\n";
547 print "negative_sign = ", $lconv->{negative_sign}, "\n";
548 print "int_frac_digits = ", $lconv->{int_frac_digits}, "\n";
549 print "frac_digits = ", $lconv->{frac_digits}, "\n";
550 print "p_cs_precedes = ", $lconv->{p_cs_precedes}, "\n";
551 print "p_sep_by_space = ", $lconv->{p_sep_by_space}, "\n";
552 print "n_cs_precedes = ", $lconv->{n_cs_precedes}, "\n";
553 print "n_sep_by_space = ", $lconv->{n_sep_by_space}, "\n";
554 print "p_sign_posn = ", $lconv->{p_sign_posn}, "\n";
555 print "n_sign_posn = ", $lconv->{n_sign_posn}, "\n";
556Move the read/write file pointer. This uses file descriptors such as
557those obtained by calling C<POSIX::open>.
558
559 $fd = POSIX::open( "foo", &POSIX::O_RDONLY );
560 $off_t = POSIX::lseek( $fd, 0, &POSIX::SEEK_SET );
561
562sub print_vers {
563 my $vers = shift;
564
565 print "=head1 CREATION\n\n";
566 print "This document generated by $0 version $vers.\n\n";
567}
568
569sub print_misc {
570 my $hdr = shift;
571 my $obj = shift;
572 my $item;
573
574 print "=head1 ", uc($hdr), "\n\n";
575 print "=over 8\n\n";
576 foreach $item (sort keys %$obj){
577 print "=item $item\n\n";
578 print join( ' ', @{$obj->{$item}}), "\n\n";
579 }
580 print "=back\n\n";
581}
582
583sub trim_hash {
584 my $name = shift;
585 my $av = shift;
586 my $hv = shift;
587
588 foreach (@$av){
589 if( exists $hv->{$_} ){
590 delete $hv->{$_};
591 }
592 else{
593 warn "$name $_ is not in the POSIX.xs module";
594 }
595 }
596}
597
598{ package Package; ## Package package
599
600 sub new {
601 my $type = shift;
602 my $pack = shift || die;
603 my $self = [ $pack, {} ];
604 bless $self, $type;
605 }
606 sub name {
607 my $self = shift;
608 $self->[0];
609 }
610 sub curfuncs {
611 my $self = shift;
612 $self->[1];
613 }
614 sub DESTROY {
615 my $self = shift;
616 my $pack = $self->name;
617 foreach (keys %{$self->curfuncs}){
618 if( $_ eq 'DESTROY' ){
619 next; # don't expect much on DESTROY
620 }
621 warn "Function ". $pack . "::$_ did not have a description.\n";
622 }
623 }
624}
625{ package Description; ## Function description
626
627 sub new {
628 my $type = shift;
629 my $self = {};
630 bless $self, $type;
631 $self->fetch;
632 return $self;
633 }
634 sub fetch {
635 my $self = shift;
636 my $pack = '';
637 my $c;
638 my( $sub, $as );
639
640 while(<main::DATA>){
641 next if /^#/;
642 $sub = $as = '';
643 if( /^==(.*)/ ){
644 $pack = $1;
645 next;
646 }
647 if( /^=([^\+]+)\+\+/ ){
648 $sub = $1;
649 $as = $sub;
650 }
651 elsif( /^=([^\+]+)\+C/ ){
652 $sub = $1;
653 $as = 'C';
654 }
655 elsif( /^=([^\+]+)\+(\w+)/ ){
656 $sub = $1;
657 $as = $2;
658 }
659 elsif( /^=(.*)/ ){
660 $sub = $1;
661 }
662
663 if( $sub ne '' ){
664 $sub = $1;
665 $self->{$pack."::$sub"} = '';
666 $c = \($self->{$pack."::$sub"});
667 if( $as eq 'C' ){
668 $$c .= "This is identical to the C function C<$sub()>.\n";
669 }
670 elsif( $as ne '' ){
671 $$c .= "This is identical to Perl's builtin C<$as()> function.\n";
672 }
673 next;
674 }
675 $$c .= $_;
676 }
677 }
678 sub DESTROY {
679 my $self = shift;
680 foreach (keys %$self){
681 warn "Function $_ is not in the POSIX.xs module.\n";
682 }
683 }
684 sub append {
685 my $self = shift;
686 my $pack = shift;
687 my $sub = shift;
688 my $str = shift || die;
689
690 if( exists $self->{$pack."::$sub"} ){
691 $self->{$pack."::$sub"} .= "\n$str.\n";
692 }
693 else{
694 $self->{$pack."::$sub"} = "$str.\n";
695 }
696 }
697 sub print {
698 my $self = shift;
699 my $pack = shift;
700 my $sub = shift;
701 my $rtype = shift || die;
702 my $ret = 0;
703
704 if( exists $self->{$pack."::$sub"} ){
705 if( $rtype > 1 ){
706 $self->{$pack."::$sub"} =~ s/identical/similar/;
707 }
708 print $self->{$pack."::$sub"}, "\n";
709 delete $self->{$pack."::$sub"};
710 if( $rtype > 1 ){
711 print "Returns C<undef> on failure.\n\n";
712 }
713 $ret = 1;
714 }
715 $ret;
716 }
717}
718
719Create an interprocess channel. This returns file descriptors like those
720returned by C<POSIX::open>.
721
722 ($fd0, $fd1) = POSIX::pipe();
723 POSIX::write( $fd0, "hello", 5 );
724 POSIX::read( $fd1, $buf, 5 );
725Read from a file. This uses file descriptors such as those obtained by
726calling C<POSIX::open>. If the buffer C<$buf> is not large enough for the
727read then Perl will extend it to make room for the request.
728
729 $fd = POSIX::open( "foo", &POSIX::O_RDONLY );
730 $bytes = POSIX::read( $fd, $buf, 3 );
731This is similar to the C function C<setpgid()>.
732Detailed signal management. This uses C<POSIX::SigAction> objects for the
733C<action> and C<oldaction> arguments. Consult your system's C<sigaction>
734manpage for details.
735
736Synopsis:
737
738 sigaction(sig, action, oldaction = 0)
739Install a signal mask and suspend process until signal arrives. This uses
740C<POSIX::SigSet> objects for the C<signal_mask> argument. Consult your
741system's C<sigsuspend> manpage for details.
742
743Synopsis:
744
745 sigsuspend(signal_mask)
746This is identical to Perl's builtin C<sprintf()> function.
747Convert date and time information to string. Returns the string.
748
749Synopsis:
750
751 strftime(fmt, sec, min, hour, mday, mon, year, wday = 0, yday = 0, isdst = 0)
752
753The month (C<mon>), weekday (C<wday>), and yearday (C<yday>) begin at zero.
754I.e. January is 0, not 1; Sunday is 0, not 1; January 1st is 0, not 1. The
755year (C<year>) is given in years since 1900. I.e. The year 1995 is 95; the
756year 2001 is 101. Consult your system's C<strftime()> manpage for details
757about these and the other arguments.
758
759The string for Tuesday, December 12, 1995.
760
761 $str = POSIX::strftime( "%A, %B %d, %Y", 0, 0, 0, 12, 11, 95, 2 );
762 print "$str\n";
763String transformation. Returns the transformed string.
764
765 $dst = POSIX::strxfrm( $src );
766Get name of current operating system.
767
768 ($sysname, $nodename, $release, $version, $machine ) = POSIX::uname();
769Returns the current file position, in bytes.
770
771 $pos = $fh->tell;
772Get terminal control attributes.
773
774Obtain the attributes for stdin.
775
776 $termios->getattr()
777
778Obtain the attributes for stdout.
779
780 $termios->getattr( 1 )
781Set terminal control attributes.
782
783Set attributes immediately for stdout.
784
785 $termios->setattr( 1, &POSIX::TCSANOW );
786
787__END__
788##########
789==POSIX::SigSet
790=new
791Create a new SigSet object. This object will be destroyed automatically
792when it is no longer needed. Arguments may be supplied to initialize the
793set.
794
795Create an empty set.
796
797 $sigset = POSIX::SigSet->new;
798
799Create a set with SIGUSR1.
800
801 $sigset = POSIX::SigSet->new( &POSIX::SIGUSR1 );
802=addset
803Add a signal to a SigSet object.
804
805 $sigset->addset( &POSIX::SIGUSR2 );
806=delset
807Remove a signal from the SigSet object.
808
809 $sigset->delset( &POSIX::SIGUSR2 );
810=emptyset
811Initialize the SigSet object to be empty.
812
813 $sigset->emptyset();
814=fillset
815Initialize the SigSet object to include all signals.
816
817 $sigset->fillset();
818=ismember
819Tests the SigSet object to see if it contains a specific signal.
820
821 if( $sigset->ismember( &POSIX::SIGUSR1 ) ){
822 print "contains SIGUSR1\n";
823 }
824##########
825==POSIX::Termios
826=new
827Create a new Termios object. This object will be destroyed automatically
828when it is no longer needed.
829
830 $termios = POSIX::Termios->new;
831=getiflag
832Retrieve the c_iflag field of a termios object.
833
834 $c_iflag = $termios->getiflag;
835=getoflag
836Retrieve the c_oflag field of a termios object.
837
838 $c_oflag = $termios->getoflag;
839=getcflag
840Retrieve the c_cflag field of a termios object.
841
842 $c_cflag = $termios->getcflag;
843=getlflag
844Retrieve the c_lflag field of a termios object.
845
846 $c_lflag = $termios->getlflag;
847=getcc
848Retrieve a value from the c_cc field of a termios object. The c_cc field is
849an array so an index must be specified.
850
851 $c_cc[1] = $termios->getcc(1);
852=getospeed
853Retrieve the output baud rate.
854
855 $ospeed = $termios->getospeed;
856=getispeed
857Retrieve the input baud rate.
858
859 $ispeed = $termios->getispeed;
860=setiflag
861Set the c_iflag field of a termios object.
862
863 $termios->setiflag( &POSIX::BRKINT );
864=setoflag
865Set the c_oflag field of a termios object.
866
867 $termios->setoflag( &POSIX::OPOST );
868=setcflag
869Set the c_cflag field of a termios object.
870
871 $termios->setcflag( &POSIX::CLOCAL );
872=setlflag
873Set the c_lflag field of a termios object.
874
875 $termios->setlflag( &POSIX::ECHO );
876=setcc
877Set a value in the c_cc field of a termios object. The c_cc field is an
878array so an index must be specified.
879
880 $termios->setcc( 1, &POSIX::VEOF );
881=setospeed
882Set the output baud rate.
883
884 $termios->setospeed( &POSIX::B9600 );
885=setispeed
886Set the input baud rate.
887
888 $termios->setispeed( &POSIX::B9600 );
889##
890=setattr
891=getattr
892##########
893==FileHandle
894=new
895=new_from_fd
896=flush
897=getc
898=ungetc
899=seek
900=setbuf
901=error
902=clearerr
903=tell
904=getpos
905=gets
906=close
907=new_tmpfile
908=eof
909=fileno
910=setpos
911=setvbuf
912##########
913==POSIX
914=tolower+lc
915=toupper+uc
916=remove+unlink
917=fabs+abs
918=strstr+index
919##
920=closedir++
921=readdir++
922=rewinddir++
923=fcntl++
924=getgrgid++
925=getgrnam++
926=atan2++
927=cos++
928=exp++
929=abs++
930=log++
931=sin++
932=sqrt++
933=getpwnam++
934=getpwuid++
935=kill++
936=getc++
937=rename++
938=exit++
939=system++
940=chmod++
941=mkdir++
942=stat++
943=umask++
944=gmtime++
945=localtime++
946=time++
947=alarm++
948=chdir++
949=chown++
950=fork++
951=getlogin++
952=getpgrp++
953=getppid++
954=link++
955=rmdir++
956=sleep++
957=unlink++
958=utime++
959##
960=perror+C
961=pause+C
962=tzset+C
963=difftime+C
964=ctime+C
965=clock+C
966=asctime+C
967=strcoll+C
968=abort+C
969=tcgetpgrp+C
970=setsid+C
971=_exit+C
972=tanh+C
973=tan+C
974=sinh+C
975=log10+C
976=ldexp+C
977=fmod+C
978=floor+C
979=cosh+C
980=ceil+C
981=atan+C
982=asin+C
983=acos+C
984##
985=isatty
986Returns a boolean indicating whether the specified filehandle is connected
987to a tty.
988=setuid
989Sets the real user id for this process.
990=setgid
991Sets the real group id for this process.
992=getpid
993Returns the process's id.
994=getuid
995Returns the user's id.
996=getegid
997Returns the effective group id.
998=geteuid
999Returns the effective user id.
1000=getgid
1001Returns the user's real group id.
1002=getgroups
1003Returns the ids of the user's supplementary groups.
1004=getcwd
1005Returns the name of the current working directory.
1006=strerror
1007Returns the error string for the specified errno.
1008=getenv
1009Returns the value of the specified enironment variable.
1010=getchar
1011Returns one character from STDIN.
1012=raise
1013Sends the specified signal to the current process.
1014=gets
1015Returns one line from STDIN.
1016=printf
1017Prints the specified arguments to STDOUT.
1018=rewind
1019Seeks to the beginning of the file.
1020##
1021=tmpnam
1022Returns a name for a temporary file.
1023
1024 $tmpfile = POSIX::tmpnam();
1025=cuserid
1026Get the character login name of the user.
1027
1028 $name = POSIX::cuserid();
1029=ctermid
1030Generates the path name for controlling terminal.
1031
1032 $path = POSIX::ctermid();
1033=times
1034The times() function returns elapsed realtime since some point in the past
1035(such as system startup), user and system times for this process, and user
1036and system times used by child processes. All times are returned in clock
1037ticks.
1038
1039 ($realtime, $user, $system, $cuser, $csystem) = POSIX::times();
1040
1041Note: Perl's builtin C<times()> function returns four values, measured in
1042seconds.
1043=pow
1044Computes $x raised to the power $exponent.
1045
1046 $ret = POSIX::pow( $x, $exponent );
1047=errno
1048Returns the value of errno.
1049
1050 $errno = POSIX::errno();
1051=sysconf
1052Retrieves values of system configurable variables.
1053
1054The following will get the machine's clock speed.
1055
1056 $clock_ticks = POSIX::sysconf( &POSIX::_SC_CLK_TCK );
1057=pathconf
1058Retrieves the value of a configurable limit on a file or directory.
1059
1060The following will determine the maximum length of the longest allowable
1061pathname on the filesystem which holds C</tmp>.
1062
1063 $path_max = POSIX::pathconf( "/tmp", &POSIX::_PC_PATH_MAX );
1064=access
1065Determines the accessibility of a file.
1066
1067 if( POSIX::access( "/", &POSIX::R_OK ) ){
1068 print "have read permission\n";
1069 }
1070=setlocale
1071Modifies and queries program's locale.
1072
1073The following will set the traditional UNIX system locale behavior.
1074
1075This document generated by ./mkposixman.PL version 19951212.
1076##
1077=waitpid
1078=wait
1079=fstat
1080=sprintf
1081=opendir
1082=creat
1083=ttyname
1084=tzname
1085=fpathconf
1086=mktime
1087=tcsendbreak
1088=tcflush
1089=tcflow
1090=tcdrain
1091=tcsetpgrp
1092=mkfifo
1093=strxfrm
1094=wctomb
1095=wcstombs
1096=mbtowc
1097=mbstowcs
1098=mblen
1099=write
1100=uname
1101=setpgid
1102=read
1103=pipe
1104=nice
1105=lseek
1106=dup2
1107=dup
1108=close
1109=sigsuspend
1110=sigprocmask
1111=sigpending
1112=sigaction
1113=modf
1114=frexp
1115=localeconv
1116=open
1117=isxdigit
1118=isupper
1119=isspace
1120=ispunct
1121=isprint
1122=isgraph
1123=isdigit
1124=iscntrl
1125=isalpha
1126=isalnum
1127=islower
1128=assert
1129=strftime
1130##########
1131==POSIX::SigAction
1132=new
1133Creates a new SigAction object. This object will be destroyed automatically
1134when it is no longer needed.