MKNOD
Section: Linux Programmer's Manual (2)
Updated: 29 March 1994
Index
Return to Main Contents
NAME
mknod - create a directory
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 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 ignored.
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 superuser; also returned if the filesystem
containing
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 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 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 filesystem and write access was
requested.
- ELOOP
-
pathname
contains a reference to a circular symbolic link, ie a symbolic link
whose expansion contains a reference to itself.
- ENOSPC
-
The device containing
pathname
has no room for the new node.
CONFORMING TO
BUGS
In some older versions of Linux (for example, 0.99pl7) all the normal
filesystems sometime allow the creation of two files in the same
directory with the same name. This occurs only rarely and only on a
heavily loaded system. It is believed that this bug was fixed in the
Minix filesystem in Linux 0.99pl8 pre-release; and it is hoped that it
was fixed in the other filesystems shortly afterwards.
mknod
cannot be used to create directories or socket files, and cannot be
used to create normal files by users other than the superuser.
There are many infelicities in the protocol underlying NFS.
SEE ALSO
read(2), write(2), fcntl(2), close(2),
unlink(2), open(2), mkdir(2), stat(2), umask(2),
mount(2), socket(2), socket(2), fopen(3).
Index
- NAME
-
- SYNOPSIS
-
- DESCRIPTION
-
- RETURN VALUE
-
- ERRORS
-
- CONFORMING TO
-
- BUGS
-
- SEE ALSO
-
This document was created by
man2html,
using the manual pages.
Time: 12:24:43 GMT, March 22, 2025