mknod

TriggerTek Logo
abcdefghijklmnopqrstuvwxyz_
MKNOD(2)		  Linux Programmer’s Manual		     MKNOD(2)



NAME
       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
       The  system call mknod creates a filesystem node (file, device special
       file or named pipe) named pathname, with attributes specified by	 mode
       and dev.

       The  mode  argument 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	must  be one of S_IFREG, S_IFCHR, S_IFBLK, S_IFIFO or
       S_IFSOCK to specify a normal file (which will be created empty), char-
       acter  special  file,  block  special file, FIFO (named pipe), or Unix
       domain socket, respectively.  (Zero file type is	 equivalent  to	 type
       S_IFREG.)

       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 symbolic link, this call fails
       with an EEXIST error.

       The newly created node will be owned by the effective uid of the	 pro-
       cess.   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; oth-
       erwise 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 regular file,
	      FIFO (named pipe), or Unix domain socket, and the caller is not
	      the superuser; also returned if the filesystem containing path-
	      name does not support the type of node requested.

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

       EEXIST pathname already exists.

       EFAULT pathname points outside your accessible address space.

       EACCES The  parent  directory  does  not allow write permission 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 dan-
	      gling 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 filesystem.

       ELOOP  Too many symbolic links were encountered in resolving 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
       POSIX 1003.1-2001 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 directories.  One
       should make directories with mkdir, and FIFOs with mkfifo.

       There are many infelicities in the protocol underlying NFS.   Some  of
       these affect mknod.

SEE ALSO
       fcntl(2), mkdir(2), mount(2), socket(2), stat(2), umask(2), unlink(2),
       mkfifo(3)



Linux 2.4			  2003-04-23			     MKNOD(2)