NAME

     mknod, mkfifo - make a special file


SYNOPSIS

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

     int mknod(const char *path, mode_t mode, dev_t dev)
     int mkfifo(const char *path, mode_t mode)


DESCRIPTION

     Mknod creates a new file whose name is path. The mode of the
     new  file  (including special file bits) is initialized from
     mode, as defined in <sys/stat.h>.  (The protection  part  of
     the  mode  is  modified  by  the  process's  mode  mask (see
     umask(2))).  The first block pointer of the i-node  is  ini-
     tialized  from  dev  and is used to specify which device the
     special file refers to.

     If mode indicates a block or character special file, dev  is
     the  device  number of a character or block I/O device.  The
     low eight bits of the device number hold  the  minor  device
     number  that  selects a device among the devices governed by
     the same driver.  The driver is selected by the major device
     number, the next eight bits of the device number.

     If mode does not indicate a block special or character  spe-
     cial  device, dev is ignored.  (For example, when creating a
     ``fifo'' special file.)

     Mknod may be invoked only by the super-user,  unless  it  is
     being used to create a fifo.

     The call mkfifo(path, mode) is equivalent to

          mknod(path, (mode & 0777) | S_IFIFO, 0)


RETURN VALUE

     Upon successful completion a value of 0 is returned.  Other-
     wise, a value of -1 is returned and errno is set to indicate
     the error.


ERRORS

     Mknod will fail and the file mode will be unchanged if:

     [ENOTDIR]      A component of  the  path  prefix  is  not  a
                    directory.

     [ENAMETOOLONG] The path name exceeds PATH_MAX characters.

     [ENOENT]       A component  of  the  path  prefix  does  not
                    exist.

     [EACCES]       Search permission is denied for  a  component
                    of the path prefix.

     [ELOOP]        Too many symbolic links were  encountered  in
                    translating the pathname.  (Minix-vmd)

     [EPERM]        The  process's  effective  user  ID  is   not
                    super-user.

     [EIO]          An I/O error occurred while making the direc-
                    tory entry or allocating the inode.

     [ENOSPC]       The directory in which the entry for the  new
                    node  is  being  placed  cannot  be  extended
                    because there is no space left  on  the  file
                    system containing the directory.

     [ENOSPC]       There are no free inodes on the  file  system
                    on which the node is being created.

     [EROFS]        The named file resides on  a  read-only  file
                    system.

     [EEXIST]       The named file exists.

     [EFAULT]       Path points outside the  process's  allocated
                    address space.


SEE ALSO

     chmod(2), stat(2), umask(2).