-
Notifications
You must be signed in to change notification settings - Fork 0
/
mknodat.html
434 lines (314 loc) · 11.6 KB
/
mknodat.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
<!-- Creator : groff version 1.22.4 -->
<!-- CreationDate: Wed Jan 29 11:26:54 2020 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta name="generator" content="groff -Thtml, see www.gnu.org">
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<meta name="Content-Style" content="text/css">
<style type="text/css">
p { margin-top: 0; margin-bottom: 0; vertical-align: top }
pre { margin-top: 0; margin-bottom: 0; vertical-align: top }
table { margin-top: 0; margin-bottom: 0; vertical-align: top }
h1 { text-align: center }
</style>
<title>MKNOD</title>
</head>
<body>
<h1 align="center">MKNOD</h1>
<a href="#NAME">NAME</a><br>
<a href="#SYNOPSIS">SYNOPSIS</a><br>
<a href="#DESCRIPTION">DESCRIPTION</a><br>
<a href="#RETURN VALUE">RETURN VALUE</a><br>
<a href="#ERRORS">ERRORS</a><br>
<a href="#VERSIONS">VERSIONS</a><br>
<a href="#CONFORMING TO">CONFORMING TO</a><br>
<a href="#NOTES">NOTES</a><br>
<a href="#SEE ALSO">SEE ALSO</a><br>
<a href="#COLOPHON">COLOPHON</a><br>
<hr>
<h2>NAME
<a name="NAME"></a>
</h2>
<p style="margin-left:11%; margin-top: 1em">mknod, mknodat
- create a special or ordinary file</p>
<h2>SYNOPSIS
<a name="SYNOPSIS"></a>
</h2>
<p style="margin-left:11%; margin-top: 1em"><b>#include
<sys/types.h> <br>
#include <sys/stat.h> <br>
#include <fcntl.h> <br>
#include <unistd.h></b></p>
<p style="margin-left:11%; margin-top: 1em"><b>int
mknod(const char *</b><i>pathname</i><b>, mode_t</b>
<i>mode</i><b>, dev_t</b> <i>dev</i><b>);</b></p>
<p style="margin-left:11%; margin-top: 1em"><b>#include
<fcntl.h></b> /* Definition of AT_* constants */
<b><br>
#include <sys/stat.h></b></p>
<p style="margin-left:11%; margin-top: 1em"><b>int
mknodat(int</b> <i>dirfd</i><b>, const char
*</b><i>pathname</i><b>, mode_t</b> <i>mode</i><b>,
dev_t</b> <i>dev</i><b>);</b></p>
<p style="margin-left:5%; margin-top: 1em">Feature Test
Macro Requirements for glibc (see
<b>feature_test_macros</b>(7)):</p>
<p style="margin-left:11%; margin-top: 1em"><b>mknod</b>():</p>
<p style="margin-left:17%;">_XOPEN_SOURCE >= 500
<br>
|| /* Since glibc 2.19: */ _DEFAULT_SOURCE <br>
|| /* Glibc versions <= 2.19: */ _BSD_SOURCE ||
_SVID_SOURCE</p>
<h2>DESCRIPTION
<a name="DESCRIPTION"></a>
</h2>
<p style="margin-left:11%; margin-top: 1em">The system call
<b>mknod</b>() creates a filesystem node (file, device
special file, or named pipe) named <i>pathname</i>, with
attributes specified by <i>mode</i> and <i>dev</i>.</p>
<p style="margin-left:11%; margin-top: 1em">The <i>mode</i>
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 in <b>inode</b>(7).</p>
<p style="margin-left:11%; margin-top: 1em">The file mode
is modified by the process’s <i>umask</i> in the usual
way: in the absence of a default ACL, the permissions of the
created node are (<i>mode</i> & ~<i>umask</i>).</p>
<p style="margin-left:11%; margin-top: 1em">The file type
must be one of <b>S_IFREG</b>, <b>S_IFCHR</b>,
<b>S_IFBLK</b>, <b>S_IFIFO</b>, or <b>S_IFSOCK</b> 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 <b>S_IFREG</b>.)</p>
<p style="margin-left:11%; margin-top: 1em">If the file
type is <b>S_IFCHR</b> or <b>S_IFBLK</b>, then <i>dev</i>
specifies the major and minor numbers of the newly created
device special file (<b>makedev</b>(3) may be useful to
build the value for <i>dev</i>); otherwise it is
ignored.</p>
<p style="margin-left:11%; margin-top: 1em">If
<i>pathname</i> already exists, or is a symbolic link, this
call fails with an <b>EEXIST</b> error.</p>
<p style="margin-left:11%; margin-top: 1em">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.</p>
<p style="margin-left:11%; margin-top: 1em"><b>mknodat()</b>
<br>
The <b>mknodat</b>() system call operates in exactly the
same way as <b>mknod</b>(), except for the differences
described here.</p>
<p style="margin-left:11%; margin-top: 1em">If the pathname
given in <i>pathname</i> is relative, then it is interpreted
relative to the directory referred to by the file descriptor
<i>dirfd</i> (rather than relative to the current working
directory of the calling process, as is done by
<b>mknod</b>() for a relative pathname).</p>
<p style="margin-left:11%; margin-top: 1em">If
<i>pathname</i> is relative and <i>dirfd</i> is the special
value <b>AT_FDCWD</b>, then <i>pathname</i> is interpreted
relative to the current working directory of the calling
process (like <b>mknod</b>()).</p>
<p style="margin-left:11%; margin-top: 1em">If
<i>pathname</i> is absolute, then <i>dirfd</i> is
ignored.</p>
<p style="margin-left:11%; margin-top: 1em">See
<b>openat</b>(2) for an explanation of the need for
<b>mknodat</b>().</p>
<h2>RETURN VALUE
<a name="RETURN VALUE"></a>
</h2>
<p style="margin-left:11%; margin-top: 1em"><b>mknod</b>()
and <b>mknodat</b>() return zero on success, or -1 if an
error occurred (in which case, <i>errno</i> is set
appropriately).</p>
<h2>ERRORS
<a name="ERRORS"></a>
</h2>
<table width="100%" border="0" rules="none" frame="void"
cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="9%">
<p style="margin-top: 1em"><b>EACCES</b></p></td>
<td width="2%"></td>
<td width="78%">
<p style="margin-top: 1em">The parent directory does not
allow write permission to the process, or one of the
directories in the path prefix of <i>pathname</i> did not
allow search permission. (See also
<b>path_resolution</b>(7).)</p> </td></tr>
<tr valign="top" align="left">
<td width="11%"></td>
<td width="9%">
<p><b>EDQUOT</b></p></td>
<td width="2%"></td>
<td width="78%">
<p>The user’s quota of disk blocks or inodes on the
filesystem has been exhausted.</p></td></tr>
<tr valign="top" align="left">
<td width="11%"></td>
<td width="9%">
<p><b>EEXIST</b></p></td>
<td width="2%"></td>
<td width="78%">
<p><i>pathname</i> already exists. This includes the case
where <i>pathname</i> is a symbolic link, dangling or
not.</p> </td></tr>
<tr valign="top" align="left">
<td width="11%"></td>
<td width="9%">
<p><b>EFAULT</b></p></td>
<td width="2%"></td>
<td width="78%">
<p><i>pathname</i> points outside your accessible address
space.</p> </td></tr>
<tr valign="top" align="left">
<td width="11%"></td>
<td width="9%">
<p><b>EINVAL</b></p></td>
<td width="2%"></td>
<td width="78%">
<p><i>mode</i> requested creation of something other than a
regular file, device special file, FIFO or socket.</p></td></tr>
<tr valign="top" align="left">
<td width="11%"></td>
<td width="9%">
<p><b>ELOOP</b></p></td>
<td width="2%"></td>
<td width="78%">
<p>Too many symbolic links were encountered in resolving
<i>pathname</i>.</p> </td></tr>
</table>
<p style="margin-left:11%;"><b>ENAMETOOLONG</b></p>
<p style="margin-left:22%;"><i>pathname</i> was too
long.</p>
<table width="100%" border="0" rules="none" frame="void"
cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="9%">
<p><b>ENOENT</b></p></td>
<td width="2%"></td>
<td width="78%">
<p>A directory component in <i>pathname</i> does not exist
or is a dangling symbolic link.</p></td></tr>
<tr valign="top" align="left">
<td width="11%"></td>
<td width="9%">
<p><b>ENOMEM</b></p></td>
<td width="2%"></td>
<td width="78%">
<p>Insufficient kernel memory was available.</p></td></tr>
<tr valign="top" align="left">
<td width="11%"></td>
<td width="9%">
<p><b>ENOSPC</b></p></td>
<td width="2%"></td>
<td width="78%">
<p>The device containing <i>pathname</i> has no room for
the new node.</p></td></tr>
</table>
<p style="margin-left:11%;"><b>ENOTDIR</b></p>
<p style="margin-left:22%;">A component used as a directory
in <i>pathname</i> is not, in fact, a directory.</p>
<table width="100%" border="0" rules="none" frame="void"
cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="7%">
<p><b>EPERM</b></p></td>
<td width="4%"></td>
<td width="78%">
<p><i>mode</i> 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</b> capability); also returned if the
filesystem containing <i>pathname</i> does not support the
type of node requested.</p></td></tr>
<tr valign="top" align="left">
<td width="11%"></td>
<td width="7%">
<p><b>EROFS</b></p></td>
<td width="4%"></td>
<td width="78%">
<p><i>pathname</i> refers to a file on a read-only
filesystem.</p> </td></tr>
</table>
<p style="margin-left:11%; margin-top: 1em">The following
additional errors can occur for <b>mknodat</b>():</p>
<table width="100%" border="0" rules="none" frame="void"
cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="7%">
<p style="margin-top: 1em"><b>EBADF</b></p></td>
<td width="4%"></td>
<td width="56%">
<p style="margin-top: 1em"><i>dirfd</i> is not a valid file
descriptor.</p> </td>
<td width="22%">
</td></tr>
</table>
<p style="margin-left:11%;"><b>ENOTDIR</b></p>
<p style="margin-left:22%;"><i>pathname</i> is relative and
<i>dirfd</i> is a file descriptor referring to a file other
than a directory.</p>
<h2>VERSIONS
<a name="VERSIONS"></a>
</h2>
<p style="margin-left:11%; margin-top: 1em"><b>mknodat</b>()
was added to Linux in kernel 2.6.16; library support was
added to glibc in version 2.4.</p>
<h2>CONFORMING TO
<a name="CONFORMING TO"></a>
</h2>
<p style="margin-left:11%; margin-top: 1em"><b>mknod</b>():
SVr4, 4.4BSD, POSIX.1-2001 (but see below),
POSIX.1-2008.</p>
<p style="margin-left:11%; margin-top: 1em"><b>mknodat</b>():
POSIX.1-2008.</p>
<h2>NOTES
<a name="NOTES"></a>
</h2>
<p style="margin-left:11%; margin-top: 1em">POSIX.1-2001
says: "The only portable use of <b>mknod</b>() is to
create a FIFO-special file. If <i>mode</i> is not
<b>S_IFIFO</b> or <i>dev</i> is not 0, the behavior of
<b>mknod</b>() is unspecified." However, nowadays one
should never use <b>mknod</b>() for this purpose; one should
use <b>mkfifo</b>(3), a function especially defined for this
purpose.</p>
<p style="margin-left:11%; margin-top: 1em">Under Linux,
<b>mknod</b>() cannot be used to create directories. One
should make directories with <b>mkdir</b>(2).</p>
<p style="margin-left:11%; margin-top: 1em">There are many
infelicities in the protocol underlying NFS. Some of these
affect <b>mknod</b>() and <b>mknodat</b>().</p>
<h2>SEE ALSO
<a name="SEE ALSO"></a>
</h2>
<p style="margin-left:11%; margin-top: 1em"><b>mknod</b>(1),
<b>chmod</b>(2), <b>chown</b>(2), <b>fcntl</b>(2),
<b>mkdir</b>(2), <b>mount</b>(2), <b>socket</b>(2),
<b>stat</b>(2), <b>umask</b>(2), <b>unlink</b>(2),
<b>makedev</b>(3), <b>mkfifo</b>(3), <b>acl</b>(5)
<b>path_resolution</b>(7)</p>
<h2>COLOPHON
<a name="COLOPHON"></a>
</h2>
<p style="margin-left:11%; margin-top: 1em">This page is
part of release 5.02 of the Linux <i>man-pages</i> project.
A description of the project, information about reporting
bugs, and the latest version of this page, can be found at
https://www.kernel.org/doc/man-pages/.</p>
<hr>
</body>
</html>