Unix::Mknod(3pm)

Unix::Mknod3pm

Perl extension for mknod, major, minor, and makedev

Usage

 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));

Overview

This module allows access to the device routines major()/minor()/makedev() that may or may not be macros in .h files.

It also allows access to the mknod(2) system call.

Functions

mknod($filename, $mode, $rdev)

Creates a block or character device special file named $filename. Must be run as a privileged user, usually root. Returns 0 on success and -1 on failure, like "POSIX::mkfifo" does.

$major = major($rdev)

Returns the major number for the device special file as defined by the st_rdev field from the stat(3) call.

$minor = minor($rdev)

Returns the minor number for the device special file as defined by the st_rdev field from the stat(3) call.

$rdev = makedev($major, $minor)

Returns the st_rdev number for the device special file from the $major and $minor numbers.

Notes

There are 2 other perl modules that implement the mknod(2) system call, but they have problems working on some platforms. "Sys::Mknod" does not work on AIX because it uses the syscall(2) generic system call which AIX does not have. "Mknod" implements S_IFIFO, which on most platforms is not implemented in mknod(1), but rather mkfifo(1) (which is implemented in POSIX perl module).

The perl module "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 argument could be something as simple as an index to a lookup table (and thereby having no decernable relation to its result).

Releases

7 releases since Debian 7 (Wheezy); the text changed 6 times.

  1. 7
  2. 8
  3. 9
  4. 10
  5. 11
  6. 12
  7. 13

Bugs

Running "make test" as non root will not truly test the functions, as in most UNIX like OSes, mknod(2) needs to be invoked by a privelaged user, usually root.

Author

Jim Pirzyk, <[email protected]>

From libunix-mknod-perl 0.05-1+b3 in Debian 13 (Trixie). Parsed by carta from the page's man source.