NAME |LIBRARY |SYNOPSIS |DESCRIPTION |RETURN VALUE |ERRORS |VERSIONS |STANDARDS |HISTORY |NOTES |SEE ALSO |COLOPHON | |
mknod(2) System Calls Manualmknod(2)mknod, mknodat - create a special or ordinary file
Standard C library (libc,-lc)
#include <sys/stat.h>int mknod(const char *path, mode_tmode, dev_tdev);#include <fcntl.h>/* Definition of AT_* constants */#include <sys/stat.h>int mknodat(intdirfd, const char *path, mode_tmode, dev_tdev); Feature Test Macro Requirements for glibc (seefeature_test_macros(7)):mknod(): _XOPEN_SOURCE >= 500 || /* Since glibc 2.19: */ _DEFAULT_SOURCE || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
The system callmknod() creates a filesystem node (file, device special file, or named pipe) namedpath, with attributes specified bymode anddev. Themode argument specifies both the file mode 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 zero or more of the file mode bits listed ininode(7). The file mode is modified by the process'sumask in the usual way: in the absence of a default ACL, the permissions of the created node are (mode & ~umask). The file type must be one ofS_IFREG,S_IFCHR,S_IFBLK,S_IFIFO, orS_IFSOCKto 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 typeS_IFREG.) If the file type isS_IFCHRorS_IFBLK, thendev specifies the major and minor numbers of the newly created device special file (makedev(3) may be useful to build the value fordev); otherwise it is ignored. Ifpath already exists, or is a symbolic link, this call fails with anEEXISTerror. 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 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 group ID of the process.mknodat() Themknodat() system call operates in exactly the same way asmknod(), except for the differences described here. Ifpath is relative, then it is interpreted relative to the directory referred to by the file descriptordirfd (rather than relative to the current working directory of the calling process, as is done bymknod() for a relative pathname). Ifpath is relative anddirfd is the special valueAT_FDCWD, thenpath is interpreted relative to the current working directory of the calling process (likemknod()). Ifpath is absolute, thendirfd is ignored. Seeopenat(2) for an explanation of the need formknodat().
mknod() andmknodat() return zero on success. On error, -1 is returned anderrno is set to indicate the error.
EACCESThe parent directory does not allow write permission to the process, or one of the directories in the path prefix ofpath did not allow search permission. (See alsopath_resolution(7).)EBADF(mknodat())path is relative butdirfd is neitherAT_FDCWD nor a valid file descriptor.EDQUOTThe user's quota of disk blocks or inodes on the filesystem has been exhausted.EEXISTpath already exists. This includes the case wherepath is a symbolic link, dangling or not.EFAULTpath points outside your accessible address space.EINVALmode requested creation of something other than a regular file, device special file, FIFO or socket.ELOOPToo many symbolic links were encountered in resolvingpath.ENAMETOOLONGpath was too long.ENOENTA directory component inpath does not exist or is a dangling symbolic link.ENOMEMInsufficient kernel memory was available.ENOSPCThe device containingpath has no room for the new node.ENOTDIR A component used as a directory inpath is not, in fact, a directory.ENOTDIR (mknodat())path is relative anddirfd is a file descriptor referring to a file other than a directory.EPERMmode 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 theCAP_MKNODcapability); also returned if the filesystem containingpath does not support the type of node requested.EROFSpath refers to a file on a read-only filesystem.
POSIX.1-2001 says: "The only portable use ofmknod() is to create a FIFO-special file. Ifmode is notS_IFIFOordev is not 0, the behavior ofmknod() is unspecified." However, nowadays one should never usemknod() for this purpose; one should usemkfifo(3), a function especially defined for this purpose. Under Linux,mknod() cannot be used to create directories. One should make directories withmkdir(2).
POSIX.1-2008.
mknod() SVr4, 4.4BSD, POSIX.1-2001 (but see VERSIONS).mknodat() Linux 2.6.16, glibc 2.4. POSIX.1-2008.
There are many infelicities in the protocol underlying NFS. Some of these affectmknod() andmknodat().
mknod(1),chmod(2),chown(2),fcntl(2),mkdir(2),mount(2),socket(2),stat(2),umask(2),unlink(2),makedev(3),mkfifo(3),acl(5),path_resolution(7)
This page is part of theman-pages (Linux kernel and C library user-space interface documentation) project. Information about the project can be found at ⟨https://www.kernel.org/doc/man-pages/⟩. If you have a bug report for this manual page, see ⟨https://git.kernel.org/pub/scm/docs/man-pages/man-pages.git/tree/CONTRIBUTING⟩. This page was obtained from the tarball man-pages-6.15.tar.gz fetched from ⟨https://mirrors.edge.kernel.org/pub/linux/docs/man-pages/⟩ on 2025-08-11. If you discover any rendering problems in this HTML version of the page, or you believe there is a better or more up- to-date source for the page, or you have corrections or improvements to the information in this COLOPHON (which isnot part of the original manual page), send a mail to man-pages@man7.orgLinux man-pages 6.15 2025-05-17mknod(2)Pages that refer to this page:mknod(1), F_NOTIFY(2const), mkdir(2), open(2), syscalls(2), unlink(2), dev_t(3type), makedev(3), mkfifo(3), remove(3), intro(4), fstab(5), proc_pid_attr(5), capabilities(7), inode(7), signal-safety(7), mount(8), xfs_db(8)
HTML rendering created 2025-09-06 byMichael Kerrisk, author ofThe Linux Programming Interface. For details of in-depthLinux/UNIX system programming training courses that I teach, lookhere. Hosting byjambit GmbH. | ![]() |