mirror of https://github.com/mkerrisk/man-pages
203 lines
5.0 KiB
Groff
203 lines
5.0 KiB
Groff
.\" Hey Emacs! This file is -*- nroff -*- source.
|
|
.\"
|
|
.\" This manpage is Copyright (C) 1992 Drew Eckhardt;
|
|
.\" 1993 Michael Haardt
|
|
.\" 1993,1994 Ian Jackson.
|
|
.\" You may distribute it under the terms of the GNU General
|
|
.\" Public License. It comes with NO WARRANTY.
|
|
.\"
|
|
.\" Modified 1996-08-18 by urs
|
|
.\" Modified 2003-04-23 by Michael Kerrisk
|
|
.\" Modified 2004-06-23 by Michael Kerrisk <mtk.manpages@gmail.com>
|
|
.\"
|
|
.TH MKNOD 2 2007-07-26 "Linux" "Linux Programmer's Manual"
|
|
.SH NAME
|
|
mknod \- create a special or ordinary file
|
|
.SH SYNOPSIS
|
|
.nf
|
|
.B #include <sys/types.h>
|
|
.B #include <sys/stat.h>
|
|
.B #include <fcntl.h>
|
|
.B #include <unistd.h>
|
|
.sp
|
|
.BI "int mknod(const char *" pathname ", mode_t " mode ", dev_t " dev );
|
|
.fi
|
|
.sp
|
|
.in -4n
|
|
Feature Test Macro Requirements for glibc (see
|
|
.BR feature_test_macros (7)):
|
|
.in
|
|
.sp
|
|
.BR mknod ():
|
|
_BSD_SOURCE || _SVID_SOURCE || _XOPEN_SOURCE\ >=\ 500
|
|
.SH DESCRIPTION
|
|
The system call
|
|
.BR mknod ()
|
|
creates a file system node (file, device special file or
|
|
named pipe) named
|
|
.IR pathname ,
|
|
with attributes specified by
|
|
.I mode
|
|
and
|
|
.IR dev .
|
|
|
|
The
|
|
.I 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
|
|
.I umask
|
|
in the usual way: the permissions of the created node are
|
|
.IR "(mode & ~umask)" .
|
|
|
|
The file type must be one of
|
|
.BR S_IFREG ,
|
|
.BR S_IFCHR ,
|
|
.BR S_IFBLK ,
|
|
.B S_IFIFO
|
|
or
|
|
.B S_IFSOCK
|
|
.\" (S_IFSOCK since Linux 1.2.4)
|
|
to specify a regular file (which will be created empty), character
|
|
special file, block special file, FIFO (named pipe), or Unix domain socket,
|
|
respectively.
|
|
(Zero file type is equivalent to type
|
|
.BR S_IFREG .)
|
|
|
|
If the file type is
|
|
.B S_IFCHR
|
|
or
|
|
.B S_IFBLK
|
|
then
|
|
.I dev
|
|
specifies the major and minor numbers of the newly created device
|
|
special file; otherwise it is ignored.
|
|
|
|
If
|
|
.I pathname
|
|
already exists, or is a symbolic link, this call fails with an
|
|
.B EEXIST
|
|
error.
|
|
|
|
The newly created node will be owned by the effective user ID of the
|
|
process.
|
|
If the directory containing the node has the set-group-ID
|
|
bit set, or if the file system 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 group ID of the process.
|
|
.SH "RETURN VALUE"
|
|
.BR mknod ()
|
|
returns zero on success, or \-1 if an error occurred (in which case,
|
|
.I errno
|
|
is set appropriately).
|
|
.SH ERRORS
|
|
.TP
|
|
.B EACCES
|
|
The parent directory does not allow write permission to the process,
|
|
or one of the directories in the path prefix of
|
|
.I pathname
|
|
did not allow search permission.
|
|
(See also
|
|
.BR path_resolution (7).)
|
|
.TP
|
|
.B EEXIST
|
|
.I pathname
|
|
already exists.
|
|
.TP
|
|
.B EFAULT
|
|
.IR pathname " points outside your accessible address space."
|
|
.TP
|
|
.B EINVAL
|
|
.I mode
|
|
requested creation of something other than a regular file, device
|
|
special file, FIFO or socket.
|
|
.TP
|
|
.B ELOOP
|
|
Too many symbolic links were encountered in resolving
|
|
.IR pathname .
|
|
.TP
|
|
.B ENAMETOOLONG
|
|
.IR pathname " was too long."
|
|
.TP
|
|
.B ENOENT
|
|
A directory component in
|
|
.I pathname
|
|
does not exist or is a dangling symbolic link.
|
|
.TP
|
|
.B ENOMEM
|
|
Insufficient kernel memory was available.
|
|
.TP
|
|
.B ENOSPC
|
|
The device containing
|
|
.I pathname
|
|
has no room for the new node.
|
|
.TP
|
|
.B ENOTDIR
|
|
A component used as a directory in
|
|
.I pathname
|
|
is not, in fact, a directory.
|
|
.TP
|
|
.B EPERM
|
|
.I mode
|
|
requested creation of something other than a regular file,
|
|
FIFO (named pipe), or Unix domain socket, and the caller
|
|
is not privileged (Linux: does not have the
|
|
.B CAP_MKNOD
|
|
capability);
|
|
.\" For Unix domain sockets and regular files, EPERM is only returned in
|
|
.\" Linux 2.2 and earlier; in Linux 2.4 and later, unprivileged can
|
|
.\" use mknod() to make these files.
|
|
also returned if the file system containing
|
|
.I pathname
|
|
does not support the type of node requested.
|
|
.TP
|
|
.B EROFS
|
|
.I pathname
|
|
refers to a file on a read-only file system.
|
|
.SH "CONFORMING TO"
|
|
SVr4, 4.4BSD, POSIX.1-2001 (but see below).
|
|
.\" 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.
|
|
.SH NOTES
|
|
POSIX.1-2001 says: "The only portable use of
|
|
.BR mknod ()
|
|
is to create a FIFO-special file.
|
|
If
|
|
.I mode
|
|
is not
|
|
.B S_IFIFO
|
|
or
|
|
.I dev
|
|
is not 0, the behavior of
|
|
.BR mknod ()
|
|
is unspecified."
|
|
However, nowadays one should never use
|
|
.BR mknod ()
|
|
for this purpose; one should use
|
|
.BR mkfifo (3),
|
|
a function especially defined for this purpose.
|
|
|
|
Under Linux, this call cannot be used to create directories.
|
|
One should make directories with
|
|
.BR mkdir (2).
|
|
.\" and one should make Unix domain sockets with socket(2) and bind(2).
|
|
|
|
There are many infelicities in the protocol underlying NFS.
|
|
Some of these affect
|
|
.BR mknod ().
|
|
.SH "SEE ALSO"
|
|
.BR fcntl (2),
|
|
.BR mkdir (2),
|
|
.BR mknodat (2),
|
|
.BR mount (2),
|
|
.BR socket (2),
|
|
.BR stat (2),
|
|
.BR umask (2),
|
|
.BR unlink (2),
|
|
.BR mkfifo (3),
|
|
.BR path_resolution (7)
|