logo
Free, unlimited AI code reviews that run on commit
git-lrc git-lrc GitHub Install Now We'd appreciate a star git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt

Unix::Mknod - Perl extension for mknod, major, minor, and makedev

Author

       Jim Pirzyk, <pirzyk@freebsd.org>

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.

Description

       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.

Name

       Unix::Mknod - Perl extension for mknod, major, minor, and makedev

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

See Also

       $ERRNO or $! for the specific error message.

       File::Stat::Bits, Mknod, POSIX, Sys::Mknod

       major(9), minor(9), mkfifo(1), mknod(8)

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

See Also