File::FcntlLock =============== File::FcntlLock is a module to do file locking in an object oriented fashion using the fcntl(2) system call. This allows locks on parts of a file as well as on the whole file and overcomes some known problems with flock(2), on which Perls flock() function is based per default. Since version 0.15 there three slightly different ways this can be done with using this package. Per default a method is used where a shared library build creation of the package is called from the Perl code to invoke the fcntl(2) system function. This method can also be used by employing the File::FcntlLock::XS module (which basically an alias for File::FcntlLock). Two further methods instead use calls of the Perl fcntl() function. In both cases at some time a C program must be run to determine the binary layout of the C flock struct used by fcntl() for locking. For the one package, File::FcntlLock::Pure, this is done while making the package. For the other, File::FcntlLock::Inline, this happens each time the package is loaded (e.g. wih the 'use' function). Of course, for this to work a C compiler must be installed on the system! Unfortunately, there seem to be a few 32-bit systems where the off_t type, used in the flock struct, is a 64-bit integer but which use a Perl version that hasn't 64-bit support enabled. On these systems the 'q' format for Perl's pack() and unpack() function isn't available and thus a "pure Perl" approach is thus not possible. On such systems the File::FcntlLock::Pure and File::FcntlLock::Inline modules won't get installed. PORTABILITY To use the module the system must support the fcntl() system call which probably will restrict its use to POSIX compliant systems. INSTALLATION To install this module type the following: perl Makefile.PL make make test make install DEPENDENCIES The module requires the following other modules: POSIX, Errno, Carp, Exporter, DynaLoader To install the module(s) a C compiler must be available and the system must support the use of shared libraries (or DLLs). For File::FcntlFlock::Inline the C compiler must also be available when the module is used. The installation of the File::FcntlLock::Pure and File::FcntlLock::Inline modules require that the Perl pack() and unpack() function support the 'q' format if the off_t type on the system is 64-bit wide. ACKNOWLEDGMENTS Thanks to Mark Jason Dominus and Benjamin Goldberg for helpful discus- sions, code examples and encouragement. Glenn Herteg pointed out several problems and also helped improve the documentation. Julian Moreno Patino helped correcting the documentation and pointed out problems arising on GNU Hurd (which seems to have only very rudimentary support for locking with fcntl(2), at least at that time). Niko Tyni and Guillem Jover encouraged and helped with implementing alternatives to a XS-only approach which hopefully will make the module more useful under certain circumstances. AUTHOR Jens Thoms Toerring COPYRIGHT AND LICENCE This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. Copyright (C) 2002-2014 Jens Thoms Toerring http://toerring.de