home *** CD-ROM | disk | FTP | other *** search
/ Acorn User 10 / AU_CD10.iso / Updates / Perl / Non-RPC / !Perl / lib / zip / Fcntl.pm < prev    next >
Text File  |  1998-10-31  |  3KB  |  138 lines

  1. package Fcntl;
  2.  
  3. =head1 NAME
  4.  
  5. Fcntl - load the C Fcntl.h defines
  6.  
  7. =head1 SYNOPSIS
  8.  
  9.     use Fcntl;
  10.     use Fcntl qw(:DEFAULT :flock);
  11.  
  12. =head1 DESCRIPTION
  13.  
  14. This module is just a translation of the C F<fnctl.h> file.
  15. Unlike the old mechanism of requiring a translated F<fnctl.ph>
  16. file, this uses the B<h2xs> program (see the Perl source distribution)
  17. and your native C compiler.  This means that it has a 
  18. far more likely chance of getting the numbers right.
  19.  
  20. =head1 NOTE
  21.  
  22. Only C<#define> symbols get translated; you must still correctly
  23. pack up your own arguments to pass as args for locking functions, etc.
  24.  
  25. =head1 EXPORTED SYMBOLS
  26.  
  27. By default your system's F_* and O_* constants (eg, F_DUPFD and
  28. O_CREAT) and the FD_CLOEXEC constant are exported into your namespace.
  29.  
  30. You can request that the flock() constants (LOCK_SH, LOCK_EX, LOCK_NB
  31. and LOCK_UN) be provided by using the tag C<:flock>.  See L<Exporter>.
  32.  
  33. You can request that the old constants (FAPPEND, FASYNC, FCREAT,
  34. FDEFER, FEXCL, FNDELAY, FNONBLOCK, FSYNC, FTRUNC) be provided for
  35. compatibility reasons by using the tag C<:Fcompat>.  For new
  36. applications the newer versions of these constants are suggested
  37. (O_APPEND, O_ASYNC, O_CREAT, O_DEFER, O_EXCL, O_NDELAY, O_NONBLOCK,
  38. O_SYNC, O_TRUNC).
  39.  
  40. Please refer to your native fcntl() and open() documentation to see
  41. what constants are implemented in your system.
  42.  
  43. =cut
  44.  
  45. use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $AUTOLOAD);
  46.  
  47. require Exporter;
  48. require DynaLoader;
  49. @ISA = qw(Exporter DynaLoader);
  50. $VERSION = "1.03";
  51. # Items to export into callers namespace by default
  52. # (move infrequently used names to @EXPORT_OK below)
  53. @EXPORT =
  54.   qw(
  55.     FD_CLOEXEC
  56.     F_DUPFD
  57.     F_EXLCK
  58.     F_GETFD
  59.     F_GETFL
  60.     F_GETLK
  61.     F_GETOWN
  62.     F_POSIX
  63.     F_RDLCK
  64.     F_SETFD
  65.     F_SETFL
  66.     F_SETLK
  67.     F_SETLKW
  68.     F_SETOWN
  69.     F_SHLCK
  70.     F_UNLCK
  71.     F_WRLCK
  72.     O_ACCMODE
  73.     O_APPEND
  74.     O_ASYNC
  75.     O_BINARY
  76.     O_CREAT
  77.     O_DEFER
  78.     O_DSYNC
  79.     O_EXCL
  80.     O_EXLOCK
  81.     O_NDELAY
  82.     O_NOCTTY
  83.     O_NONBLOCK
  84.     O_RDONLY
  85.     O_RDWR
  86.     O_RSYNC
  87.     O_SHLOCK
  88.     O_SYNC
  89.     O_TEXT
  90.     O_TRUNC
  91.     O_WRONLY
  92.      );
  93.  
  94. # Other items we are prepared to export if requested
  95. @EXPORT_OK = qw(
  96.     FAPPEND
  97.     FASYNC
  98.     FCREAT
  99.     FDEFER
  100.     FEXCL
  101.     FNDELAY
  102.     FNONBLOCK
  103.     FSYNC
  104.     FTRUNC
  105.     LOCK_EX
  106.     LOCK_NB
  107.     LOCK_SH
  108.     LOCK_UN
  109. );
  110. # Named groups of exports
  111. %EXPORT_TAGS = (
  112.     'flock'   => [qw(LOCK_SH LOCK_EX LOCK_NB LOCK_UN)],
  113.     'Fcompat' => [qw(FAPPEND FASYNC FCREAT FDEFER FEXCL
  114.                  FNDELAY FNONBLOCK FSYNC FTRUNC)],
  115. );
  116.  
  117. sub AUTOLOAD {
  118.     (my $constname = $AUTOLOAD) =~ s/.*:://;
  119.     my $val = constant($constname, 0);
  120.     if ($! != 0) {
  121.     if ($! =~ /Invalid/) {
  122.         $AutoLoader::AUTOLOAD = $AUTOLOAD;
  123.         goto &AutoLoader::AUTOLOAD;
  124.     }
  125.     else {
  126.         my ($pack,$file,$line) = caller;
  127.         die "Your vendor has not defined Fcntl macro $constname, used at $file line $line.
  128. ";
  129.     }
  130.     }
  131.     *$AUTOLOAD = sub { $val };
  132.     goto &$AUTOLOAD;
  133. }
  134.  
  135. bootstrap Fcntl $VERSION;
  136.  
  137. 1;
  138.