xref: /freebsd/lib/libsys/mknod.2 (revision d15f2551b25f79ddcbe289faa95e655100b952da)
1.\" Copyright (c) 1980, 1991, 1993
2.\"	The Regents of the University of California.  All rights reserved.
3.\"
4.\" Redistribution and use in source and binary forms, with or without
5.\" modification, are permitted provided that the following conditions
6.\" are met:
7.\" 1. Redistributions of source code must retain the above copyright
8.\"    notice, this list of conditions and the following disclaimer.
9.\" 2. Redistributions in binary form must reproduce the above copyright
10.\"    notice, this list of conditions and the following disclaimer in the
11.\"    documentation and/or other materials provided with the distribution.
12.\" 3. Neither the name of the University nor the names of its contributors
13.\"    may be used to endorse or promote products derived from this software
14.\"    without specific prior written permission.
15.\"
16.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
17.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
20.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
22.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26.\" SUCH DAMAGE.
27.\"
28.Dd March 30, 2020
29.Dt MKNOD 2
30.Os
31.Sh NAME
32.Nm mknod ,
33.Nm mknodat
34.Nd make a special file node
35.Sh LIBRARY
36.Lb libc
37.Sh SYNOPSIS
38.In sys/stat.h
39.Ft int
40.Fn mknod "const char *path" "mode_t mode" "dev_t dev"
41.Ft int
42.Fn mknodat "int fd" "const char *path" "mode_t mode" "dev_t dev"
43.Sh DESCRIPTION
44The file system node
45.Fa path
46is created with the file type and access permissions specified in
47.Fa mode .
48The access permissions are modified by the process's umask value.
49.Pp
50If
51.Fa mode
52indicates a block or character special file,
53.Fa dev
54is a configuration dependent specification denoting a particular device
55on the system.
56Otherwise, if
57.Fa mode
58indicates the request to create a FIFO
59.Pq see Xr mkfifo 2
60the
61.Fa dev
62argument must be zero.
63For creating whiteouts, the
64.Fa dev
65argument is ignored.
66.Pp
67The
68.Fn mknod
69system call, unless called to create FIFO,
70requires super-user privileges.
71.Pp
72The
73.Fn mknodat
74system call is equivalent to
75.Fn mknod
76except in the case where
77.Fa path
78specifies a relative path.
79In this case the newly created device node is created relative to the
80directory associated with the file descriptor
81.Fa fd
82instead of the current working directory.
83If
84.Fn mknodat
85is passed the special value
86.Dv AT_FDCWD
87in the
88.Fa fd
89parameter, the current working directory is used and the behavior is
90identical to a call to
91.Fn mknod .
92.Sh RETURN VALUES
93.Rv -std mknod
94.Sh ERRORS
95The
96.Fn mknod
97system call
98will fail and the file will be not created if:
99.Bl -tag -width Er
100.It Bq Er ENOTDIR
101A component of the path prefix is not a directory.
102.It Bq Er ENAMETOOLONG
103A component of a pathname exceeded 255 characters,
104or an entire path name exceeded 1023 characters.
105.It Bq Er ENOENT
106A component of the path prefix does not exist.
107.It Bq Er EACCES
108Search permission is denied for a component of the path prefix.
109.It Bq Er ELOOP
110Too many symbolic links were encountered in translating the pathname.
111.It Bq Er EPERM
112The process's effective user ID is not super-user.
113.It Bq Er EIO
114An I/O error occurred while making the directory entry or allocating the inode.
115.It Bq Er EINTEGRITY
116Corrupted data was detected while reading from the file system.
117.It Bq Er ENOSPC
118The directory in which the entry for the new node is being placed
119cannot be extended because there is no space left on the file
120system containing the directory.
121.It Bq Er ENOSPC
122There are no free inodes on the file system on which the
123node is being created.
124.It Bq Er EDQUOT
125The directory in which the entry for the new node
126is being placed cannot be extended because the
127user's quota of disk blocks on the file system
128containing the directory has been exhausted.
129.It Bq Er EDQUOT
130The user's quota of inodes on the file system on
131which the node is being created has been exhausted.
132.It Bq Er EROFS
133The named file resides on a read-only file system.
134.It Bq Er EEXIST
135The named file exists.
136.It Bq Er EFAULT
137The
138.Fa path
139argument
140points outside the process's allocated address space.
141.It Bq Er EINVAL
142Creating anything other than a block or character special
143file, whiteout, or FIFO, is not supported.
144.It Bq Er EINVAL
145Non-zero
146.Fa dev
147specified when creating FIFO.
148.El
149.Pp
150In addition to the errors returned by the
151.Fn mknod ,
152the
153.Fn mknodat
154may fail if:
155.Bl -tag -width Er
156.It Bq Er EBADF
157The
158.Fa path
159argument does not specify an absolute path and the
160.Fa fd
161argument is neither
162.Dv AT_FDCWD
163nor a valid file descriptor open for searching.
164.It Bq Er ENOTDIR
165The
166.Fa path
167argument is not an absolute path and
168.Fa fd
169is neither
170.Dv AT_FDCWD
171nor a file descriptor associated with a directory.
172.El
173.Sh SEE ALSO
174.Xr chmod 2 ,
175.Xr mkfifo 2 ,
176.Xr stat 2 ,
177.Xr umask 2
178.Sh STANDARDS
179The
180.Fn mknodat
181system call follows The Open Group Extended API Set 2 specification.
182.Sh HISTORY
183The
184.Fn mknod
185function appeared in
186.At v4 .
187The
188.Fn mknodat
189system call appeared in
190.Fx 8.0 .
191