home *** CD-ROM | disk | FTP | other *** search
/ CLIX - Fazer Clix Custa Nix / CLIX-CD.cdr / mac / lib / Fcntl.pm < prev    next >
Text File  |  1998-04-04  |  2KB  |  89 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 O_CREAT)
  28. are exported into your namespace.  You can request that the flock()
  29. constants (LOCK_SH, LOCK_EX, LOCK_NB and LOCK_UN) be provided by using
  30. the tag C<:flock>.  See L<Exporter>.
  31.  
  32. Please refer to your native fcntl() and open() documentation to see
  33. what constants are implemented in your system.
  34.  
  35. =cut
  36.  
  37. use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $AUTOLOAD);
  38.  
  39. require Exporter;
  40. require DynaLoader;
  41. @ISA = qw(Exporter DynaLoader);
  42. $VERSION = "1.03";
  43. # Items to export into callers namespace by default
  44. # (move infrequently used names to @EXPORT_OK below)
  45. @EXPORT =
  46.   qw(
  47.      F_DUPFD F_GETFD F_GETLK F_SETFD F_GETFL F_SETFL F_SETLK F_SETLKW
  48.      FD_CLOEXEC F_RDLCK F_UNLCK F_WRLCK
  49.      O_CREAT O_EXCL O_NOCTTY O_TRUNC
  50.      O_APPEND O_NONBLOCK
  51.      O_NDELAY O_DEFER
  52.      O_RDONLY O_RDWR O_WRONLY
  53.      O_EXLOCK O_SHLOCK O_ASYNC O_DSYNC O_RSYNC O_SYNC
  54.      F_SETOWN F_GETOWN
  55.      O_ALIAS O_RSRC
  56.      );
  57.  
  58. # Other items we are prepared to export if requested
  59. @EXPORT_OK = qw(
  60.     LOCK_SH LOCK_EX LOCK_NB LOCK_UN
  61. );
  62. # Named groups of exports
  63. %EXPORT_TAGS = (
  64.     'flock' => [qw(LOCK_SH LOCK_EX LOCK_NB LOCK_UN)],
  65. );
  66.  
  67. sub AUTOLOAD {
  68.     my($constname);
  69.     ($constname = $AUTOLOAD) =~ s/.*:://;
  70.     my $val = constant($constname, @_ ? $_[0] : 0);
  71.     if ($! != 0) {
  72.     if ($! =~ /Invalid/) {
  73.         $AutoLoader::AUTOLOAD = $AUTOLOAD;
  74.         goto &AutoLoader::AUTOLOAD;
  75.     }
  76.     else {
  77.         my ($pack,$file,$line) = caller;
  78.         die "Your vendor has not defined Fcntl macro $constname, used at $file line $line.
  79. ";
  80.     }
  81.     }
  82.     eval "sub $AUTOLOAD { $val }";
  83.     goto &$AUTOLOAD;
  84. }
  85.  
  86. bootstrap Fcntl $VERSION;
  87.  
  88. 1;
  89.