summaryrefslogtreecommitdiff
path: root/lib/Unix/Mknod.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Unix/Mknod.pm')
-rw-r--r--lib/Unix/Mknod.pm162
1 files changed, 162 insertions, 0 deletions
diff --git a/lib/Unix/Mknod.pm b/lib/Unix/Mknod.pm
new file mode 100644
index 0000000..a158ebe
--- /dev/null
+++ b/lib/Unix/Mknod.pm
@@ -0,0 +1,162 @@
+package Unix::Mknod;
+
+use 5.006;
+use strict;
+use warnings;
+
+require Exporter;
+
+our @ISA = qw(Exporter);
+
+# Items to export into callers namespace by default. Note: do not export
+# names by default without a very good reason. Use EXPORT_OK instead.
+# Do not simply export all your public functions/methods/constants.
+
+# This allows declaration use Unix::Mknod qw(:all);
+# If you do not need this, moving things directly into @EXPORT or @EXPORT_OK
+# will save memory.
+our %EXPORT_TAGS = ( 'all' => [ qw(
+ mknod major minor makedev
+) ] );
+
+our @EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} });
+
+our @EXPORT = qw(
+
+);
+
+our $VERSION = '0.05';
+
+require XSLoader;
+XSLoader::load('Unix::Mknod', $VERSION);
+
+1;
+__END__
+
+=head1 NAME
+
+Unix::Mknod - Perl extension for mknod, major, minor, and makedev
+
+=head1 SYNOPSIS
+
+ use Unix::Mknod qw(:all);
+ use File::stat;
+ use Fcntl qw(:mode);
+
+ $st=stat('/dev/null');
+ $major=major($st->rdev);
+ $minor=minor($st->rdev);
+
+ mknod('/tmp/special', S_IFCHR|0600, makedev($major,$minor+1));
+
+=head1 DESCRIPTION
+
+This module allows access to the device routines major()/minor()/makedev()
+that may or may not be macros in .h files.
+
+0.05 adds a fix that was in the comments for several years.
+
+(Easy install would be to 'git clone'/aquire this source and `cpanm .` in the appropriate directory)
+
+It also allows access to the C<mknod(2)> system call.
+
+=head1 FUNCTIONS
+
+=over 4
+
+=item I<mknod($filename, $mode, $rdev)>
+
+Creates a block or character device special file named I<$filename>.
+Must be run as a privileged user, usually I<root>. Returns 0 on success
+and -1 on failure, like C<POSIX::mkfifo> does.
+
+=item I<$major = major($rdev)>
+
+Returns the major number for the device special file as defined by the
+st_rdev field from the C<stat(3)> call.
+
+=item I<$minor = minor($rdev)>
+
+Returns the minor number for the device special file as defined by the
+st_rdev field from the C<stat(3)> call.
+
+=item I<$rdev = makedev($major, $minor)>
+
+Returns the st_rdev number for the device special file from the I<$major>
+and I<$minor> numbers.
+
+=back
+
+=head1 NOTES
+
+There are 2 other perl modules that implement the C<mknod(2)> system call,
+but they have problems working on some platforms. C<Sys::Mknod> does not
+work on AIX because it uses the C<syscall(2)> generic system call which
+AIX does not have. C<Mknod> implements S_IFIFO, which on most platforms
+is not implemented in C<mknod(1)>, but rather C<mkfifo(1)> (which is
+implemented in POSIX perl module).
+
+The perl module C<File::Stat::Bits> also implements major() and minor() (and
+a version of makedev() called dev_join). They are done as a program to
+get the bit masks at compile time, but if major() and minor() are
+implemented as sub routines, the arugment could be something as simple
+as an index to a lookup table (and thereby having no decernable relation
+to its result).
+
+=head1 BUGS
+
+Running C<make test> as non root will not truly test the functions, as in
+most UNIX like OSes, C<mknod(2)> needs to be invoked by a privelaged user,
+usually I<root>.
+
+=head1 SEE ALSO
+
+C<$ERRNO> or C<$!> for the specific error message.
+
+L<File::Stat::Bits>, L<Mknod>, L<POSIX>, L<Sys::Mknod>
+
+C<major(9)>, C<minor(9)>, C<mkfifo(1)>, C<mknod(8)>
+
+ftp://ftp-dev.cites.uiuc.edu/pub/Unix-Mknod
+
+=head1 AUTHOR
+
+Jim Pirzyk, E<lt>pirzyk@uiuc.eduE<gt>
+
+=head1 COPYRIGHT AND LICENSE
+
+Copyright (c) 2005-2008 University of Illinois Board of Trustees
+All rights reserved.
+
+Developed by: Campus Information Technologies and Educational Services,
+ University of Illinois at Urbana-Champaign
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+``Software''), to deal with the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+* Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimers.
+
+* Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimers in the
+ documentation and/or other materials provided with the distribution.
+
+* Neither the names of Campus Information Technologies and Educational
+ Services, University of Illinois at Urbana-Champaign, nor the names
+ of its contributors may be used to endorse or promote products derived
+ from this Software without specific prior written permission.
+
+THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR
+ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
+OR THE USE OR OTHER DEALINGS WITH THE SOFTWARE.
+
+=cut