From ccaa1bdfa70ddc1587b519420e37f7689081bb58 Mon Sep 17 00:00:00 2001 From: jake Date: Thu, 26 Oct 2023 01:39:30 -0400 Subject: GIT THIS --- lib/Unix/Mknod.pm | 162 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 162 insertions(+) create mode 100644 lib/Unix/Mknod.pm (limited to 'lib') 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 system call. + +=head1 FUNCTIONS + +=over 4 + +=item I + +Creates a block or character device special file named I<$filename>. +Must be run as a privileged user, usually I. Returns 0 on success +and -1 on failure, like C 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 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 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 system call, +but they have problems working on some platforms. C does not +work on AIX because it uses the C generic system call which +AIX does not have. C implements S_IFIFO, which on most platforms +is not implemented in C, but rather C (which is +implemented in POSIX perl module). + +The perl module C 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 as non root will not truly test the functions, as in +most UNIX like OSes, C needs to be invoked by a privelaged user, +usually I. + +=head1 SEE ALSO + +C<$ERRNO> or C<$!> for the specific error message. + +L, L, L, L + +C, C, C, C + +ftp://ftp-dev.cites.uiuc.edu/pub/Unix-Mknod + +=head1 AUTHOR + +Jim Pirzyk, Epirzyk@uiuc.eduE + +=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 -- cgit v1.2.3