mknod - create a special or ordinary file


SYNOPSIS

       #include <sys/types.h>
       #include <sys/stat.h>
       #include <fcntl.h>
       #include <unistd.h>

       int mknod(const char *pathname, mode_t mode, dev_t dev);


DESCRIPTION

       mknod  attempts  to create a filesystem node (file, device
       special file or named pipe) named pathname,  specified  by
       mode and dev.

       mode specifies both the permissions to use and the type of
       node to be created.

       It should be a combination (using bitwise OR)  of  one  of
       the  file  types  listed below and the permissions for the
       new node.

       The permissions are modified by the process's umask in the
       usual way: the permissions of the created node are (mode &
       ~umask).

       The file type should be one of S_IFREG,  S_IFCHR,  S_IFBLK
       and  S_IFIFO  to specify a normal file (which will be cre­
       ated empty), character special file, block special file or
       FIFO  (named pipe), respectively, or zero, which will cre­
       ate a normal file.

       If the file type is S_IFCHR or S_IFBLK then dev  specifies
       the  major  and  minor numbers of the newly created device
       special file; otherwise it is ignored.

       If pathname already exists, or is  a  symlink,  this  call
       fails with an EEXIST error.

       The  newly created node will be owned by the effective uid
       of the process.  If the directory containing the node  has
       the  set group id bit set, or if the filesystem is mounted
       with BSD group semantics, the new node  will  inherit  the
       group  ownership  from  its parent directory; otherwise it
       will be owned by the effective gid of the process.


RETURN VALUE

       mknod returns zero on success, or -1 if an error  occurred
       (in which case, errno is set appropriately).


ERRORS

       EPERM  mode  requested  creation of something other than a
              FIFO (named  pipe),  and  the  caller  is  not  the

              ing pathname does not  support  the  type  of  node
              requested.

       EINVAL mode  requested  creation of something other than a
              normal file, device special file or FIFO.

       EEXIST pathname already exists.

       EFAULT pathname points  outside  your  accessible  address
              space.

       EACCES The  parent  directory does not allow write permis­
              sion to the process, or one of the  directories  in
              pathname did not allow search (execute) permission.

       ENAMETOOLONG
              pathname was too long.

       ENOENT A directory component in pathname does not exist or
              is a dangling symbolic link.

       ENOTDIR
              A component used as a directory in pathname is not,
              in fact, a directory.

       ENOMEM Insufficient kernel memory was available.

       EROFS  pathname refers to a file on a  read-only  filesys­
              tem.

       ELOOP  Too many symbolic links were encountered in resolv­
              ing pathname.

       ENOSPC The device containing pathname has no room for  the
              new node.


CONFORMING TO

       SVr4  (but  the call requires privilege and is thus not in
       POSIX), 4.4BSD.  The Linux version differs from  the  SVr4
       version  in  that  it  does not require root permission to
       create pipes, also in that no EMULTIHOP, ENOLINK, or EINTR
       error is documented.


NOTES

       The  Austin  draft says: "The only portable use of mknod()
       is to create a FIFO-special file. If mode is  not  S_IFIFO
       or  dev is not 0, the behavior of mknod() is unspecified."

       Under Linux, this call cannot be used to  create  directo­
       ries  or socket files, and cannot be used to create normal
       files by users other than the superuser.  One should  make
       directories with mkdir, and FIFOs with mkfifo.

       NFS.  Some of these affect mknod.


SEE ALSO

       close(2), fcntl(2), mkdir(2), mount(2), open(2),  read(2),
       socket(2),   stat(2),   umask(2),   unlink(2),   write(2),
       fopen(3), mkfifo(3)


Man(1) output converted with man2html