home *** CD-ROM | disk | FTP | other *** search
/ PC World 2004 November / PCWorld_2004-11_cd.bin / software / topware / activeperl / ActivePerl-5.8.4.810-MSWin32-x86.exe / ActivePerl-5.8.4.810 / Perl / lib / Fcntl.pm < prev    next >
Text File  |  2004-06-01  |  6KB  |  237 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<fcntl.h> file.
  15. Unlike the old mechanism of requiring a translated F<fcntl.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. For ease of use also the SEEK_* constants (for seek() and sysseek(),
  41. e.g. SEEK_END) and the S_I* constants (for chmod() and stat()) are
  42. available for import.  They can be imported either separately or using
  43. the tags C<:seek> and C<:mode>.
  44.  
  45. Please refer to your native fcntl(2), open(2), fseek(3), lseek(2)
  46. (equal to Perl's seek() and sysseek(), respectively), and chmod(2)
  47. documentation to see what constants are implemented in your system.
  48.  
  49. See L<perlopentut> to learn about the uses of the O_* constants
  50. with sysopen().
  51.  
  52. See L<perlfunc/seek> and L<perlfunc/sysseek> about the SEEK_* constants.
  53.  
  54. See L<perlfunc/stat> about the S_I* constants.
  55.  
  56. =cut
  57.  
  58. our($VERSION, @ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS, $AUTOLOAD);
  59.  
  60. require Exporter;
  61. use XSLoader ();
  62. @ISA = qw(Exporter);
  63. $VERSION = "1.05";
  64. # Items to export into callers namespace by default
  65. # (move infrequently used names to @EXPORT_OK below)
  66. @EXPORT =
  67.   qw(
  68.     FD_CLOEXEC
  69.     F_ALLOCSP
  70.     F_ALLOCSP64
  71.     F_COMPAT
  72.     F_DUP2FD
  73.     F_DUPFD
  74.     F_EXLCK
  75.     F_FREESP
  76.     F_FREESP64
  77.     F_FSYNC
  78.     F_FSYNC64
  79.     F_GETFD
  80.     F_GETFL
  81.     F_GETLK
  82.     F_GETLK64
  83.     F_GETOWN
  84.     F_NODNY
  85.     F_POSIX
  86.     F_RDACC
  87.     F_RDDNY
  88.     F_RDLCK
  89.     F_RWACC
  90.     F_RWDNY
  91.     F_SETFD
  92.     F_SETFL
  93.     F_SETLK
  94.     F_SETLK64
  95.     F_SETLKW
  96.     F_SETLKW64
  97.     F_SETOWN
  98.     F_SHARE
  99.     F_SHLCK
  100.     F_UNLCK
  101.     F_UNSHARE
  102.     F_WRACC
  103.     F_WRDNY
  104.     F_WRLCK
  105.     O_ACCMODE
  106.     O_ALIAS
  107.     O_APPEND
  108.     O_ASYNC
  109.     O_BINARY
  110.     O_CREAT
  111.     O_DEFER
  112.     O_DIRECT
  113.     O_DIRECTORY
  114.     O_DSYNC
  115.     O_EXCL
  116.     O_EXLOCK
  117.     O_LARGEFILE
  118.     O_NDELAY
  119.     O_NOCTTY
  120.     O_NOFOLLOW
  121.     O_NOINHERIT
  122.     O_NONBLOCK
  123.     O_RANDOM
  124.     O_RAW
  125.     O_RDONLY
  126.     O_RDWR
  127.     O_RSRC
  128.     O_RSYNC
  129.     O_SEQUENTIAL
  130.     O_SHLOCK
  131.     O_SYNC
  132.     O_TEMPORARY
  133.     O_TEXT
  134.     O_TRUNC
  135.     O_WRONLY
  136.      );
  137.  
  138. # Other items we are prepared to export if requested
  139. @EXPORT_OK = qw(
  140.     DN_ACCESS
  141.     DN_ATTRIB
  142.     DN_CREATE
  143.     DN_DELETE
  144.     DN_MODIFY
  145.     DN_MULTISHOT
  146.     DN_RENAME
  147.     FAPPEND
  148.     FASYNC
  149.     FCREAT
  150.     FDEFER
  151.     FDSYNC
  152.     FEXCL
  153.     FLARGEFILE
  154.     FNDELAY
  155.     FNONBLOCK
  156.     FRSYNC
  157.     FSYNC
  158.     FTRUNC
  159.     F_GETLEASE
  160.     F_GETSIG
  161.     F_NOTIFY
  162.     F_SETLEASE
  163.     F_SETSIG
  164.     LOCK_EX
  165.     LOCK_MAND
  166.     LOCK_NB
  167.     LOCK_READ
  168.     LOCK_RW
  169.     LOCK_SH
  170.     LOCK_UN
  171.     LOCK_WRITE
  172.     O_IGNORE_CTTY
  173.     O_NOATIME
  174.     O_NOLINK
  175.     O_NOTRANS
  176.     SEEK_CUR
  177.     SEEK_END
  178.     SEEK_SET
  179.     S_IFSOCK S_IFBLK S_IFCHR S_IFIFO S_IFWHT S_ENFMT
  180.     S_IREAD S_IWRITE S_IEXEC
  181.     S_IRGRP S_IWGRP S_IXGRP S_IRWXG
  182.     S_IROTH S_IWOTH S_IXOTH S_IRWXO
  183.     S_IRUSR S_IWUSR S_IXUSR S_IRWXU
  184.     S_ISUID S_ISGID S_ISVTX S_ISTXT
  185.     _S_IFMT S_IFREG S_IFDIR S_IFLNK
  186.     &S_ISREG &S_ISDIR &S_ISLNK &S_ISSOCK &S_ISBLK &S_ISCHR &S_ISFIFO
  187.     &S_ISWHT &S_ISENFMT &S_IFMT &S_IMODE
  188. );
  189. # Named groups of exports
  190. %EXPORT_TAGS = (
  191.     'flock'   => [qw(LOCK_SH LOCK_EX LOCK_NB LOCK_UN)],
  192.     'Fcompat' => [qw(FAPPEND FASYNC FCREAT FDEFER FDSYNC FEXCL FLARGEFILE
  193.              FNDELAY FNONBLOCK FRSYNC FSYNC FTRUNC)],
  194.     'seek'    => [qw(SEEK_SET SEEK_CUR SEEK_END)],
  195.     'mode'    => [qw(S_ISUID S_ISGID S_ISVTX S_ISTXT
  196.              _S_IFMT S_IFREG S_IFDIR S_IFLNK
  197.              S_IFSOCK S_IFBLK S_IFCHR S_IFIFO S_IFWHT S_ENFMT
  198.              S_IRUSR S_IWUSR S_IXUSR S_IRWXU
  199.              S_IRGRP S_IWGRP S_IXGRP S_IRWXG
  200.              S_IROTH S_IWOTH S_IXOTH S_IRWXO
  201.              S_IREAD S_IWRITE S_IEXEC
  202.              S_ISREG S_ISDIR S_ISLNK S_ISSOCK
  203.              S_ISBLK S_ISCHR S_ISFIFO
  204.              S_ISWHT S_ISENFMT        
  205.              S_IFMT S_IMODE
  206.                   )],
  207. );
  208.  
  209. sub S_IFMT  { @_ ? ( $_[0] & _S_IFMT() ) : _S_IFMT()  }
  210. sub S_IMODE { $_[0] & 07777 }
  211.  
  212. sub S_ISREG    { ( $_[0] & _S_IFMT() ) == S_IFREG()   }
  213. sub S_ISDIR    { ( $_[0] & _S_IFMT() ) == S_IFDIR()   }
  214. sub S_ISLNK    { ( $_[0] & _S_IFMT() ) == S_IFLNK()   }
  215. sub S_ISSOCK   { ( $_[0] & _S_IFMT() ) == S_IFSOCK()  }
  216. sub S_ISBLK    { ( $_[0] & _S_IFMT() ) == S_IFBLK()   }
  217. sub S_ISCHR    { ( $_[0] & _S_IFMT() ) == S_IFCHR()   }
  218. sub S_ISFIFO   { ( $_[0] & _S_IFMT() ) == S_IFIFO()   }
  219. sub S_ISWHT    { ( $_[0] & _S_IFMT() ) == S_IFWHT()   }
  220. sub S_ISENFMT  { ( $_[0] & _S_IFMT() ) == S_IFENFMT() }
  221.  
  222. sub AUTOLOAD {
  223.     (my $constname = $AUTOLOAD) =~ s/.*:://;
  224.     die "&Fcntl::constant not defined" if $constname eq 'constant';
  225.     my ($error, $val) = constant($constname);
  226.     if ($error) {
  227.         my (undef,$file,$line) = caller;
  228.         die "$error at $file line $line.\n";
  229.     }
  230.     *$AUTOLOAD = sub { $val };
  231.     goto &$AUTOLOAD;
  232. }
  233.  
  234. XSLoader::load 'Fcntl', $VERSION;
  235.  
  236. 1;
  237.