Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages


home | help
MKNOD(2)		   Linux Programmer's Manual		      MKNOD(2)

       mknod - create a	special	or ordinary file

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

       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

       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 created empty), character  special
       file,  block  special file or FIFO (named pipe),	respectively, or zero,
       which will create 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

       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;	other-
       wise it will be owned by	the effective gid of the process.

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

       EPERM  mode requested creation of something other than  a  FIFO	(named
	      pipe), and the caller is not the superuser; also returned	if the
	      filesystem containing pathname does not support the type of node

       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  permission  to  the
	      process,	or  one	 of  the directories in	pathname did not allow
	      search (execute) permission.

	      pathname was too long.

       ENOENT A	directory component in pathname	does not exist or  is  a  dan-
	      gling symbolic link.

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

       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.

       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 EMUL-
       TIHOP, ENOLINK, or EINTR	error is documented.

       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	behav-
       ior of mknod() is unspecified."

       Under  Linux,  this call	cannot be used to create directories 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

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

       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)

Linux 1.0			  1994-03-29			      MKNOD(2)


Want to link to this manual page? Use this URL:

home | help