Originální popis anglicky:
mknod - make a directory, a special file, or a regular file
Návod, kniha: POSIX Programmer's Manual
#include <sys/stat.h>
int mknod(const char *
path, mode_t
mode , dev_t dev);
The
mknod() function shall create a new file named by the pathname to
which the argument
path points.
The file type for
path is OR'ed into the
mode argument, and the
application shall select one of the following symbolic constants:
Name |
Description |
S_IFIFO |
FIFO-special |
S_IFCHR |
Character-special (non-portable) |
S_IFDIR |
Directory (non-portable) |
S_IFBLK |
Block-special (non-portable) |
S_IFREG |
Regular (non-portable) |
The only portable use of
mknod() is to create a FIFO-special file. If
mode is not S_IFIFO or
dev is not 0, the behavior of
mknod() is unspecified.
The permissions for the new file are OR'ed into the
mode argument, and
may be selected from any combination of the following symbolic constants:
Name |
Description |
S_ISUID |
Set user ID on execution. |
S_ISGID |
Set group ID on execution. |
S_IRWXU |
Read, write, or execute (search) by owner. |
S_IRUSR |
Read by owner. |
S_IWUSR |
Write by owner. |
S_IXUSR |
Execute (search) by owner. |
S_IRWXG |
Read, write, or execute (search) by group. |
S_IRGRP |
Read by group. |
S_IWGRP |
Write by group. |
S_IXGRP |
Execute (search) by group. |
S_IRWXO |
Read, write, or execute (search) by others. |
S_IROTH |
Read by others. |
S_IWOTH |
Write by others. |
S_IXOTH |
Execute (search) by others. |
S_ISVTX |
On directories, restricted deletion flag. |
The user ID of the file shall be initialized to the effective user ID of the
process. The group ID of the file shall be initialized to either the effective
group ID of the process or the group ID of the parent directory.
Implementations shall provide a way to initialize the file's group ID to the
group ID of the parent directory. Implementations may, but need not, provide
an implementation-defined way to initialize the file's group ID to the
effective group ID of the calling process. The owner, group, and other
permission bits of
mode shall be modified by the file mode creation
mask of the process. The
mknod() function shall clear each bit whose
corresponding bit in the file mode creation mask of the process is set.
If
path names a symbolic link,
mknod() shall fail and set
errno to [EEXIST].
Upon successful completion,
mknod() shall mark for update the
st_atime,
st_ctime, and
st_mtime fields of the file.
Also, the
st_ctime and
st_mtime fields of the directory that
contains the new entry shall be marked for update.
Only a process with appropriate privileges may invoke
mknod() for file
types other than FIFO-special.
Upon successful completion,
mknod() shall return 0. Otherwise, it shall
return -1, the new file shall not be created, and
errno shall be set to
indicate the error.
The
mknod() function shall fail if:
- EACCES
- A component of the path prefix denies search permission, or
write permission is denied on the parent directory.
- EEXIST
- The named file exists.
- EINVAL
- An invalid argument exists.
- EIO
- An I/O error occurred while accessing the file system.
- ELOOP
- A loop exists in symbolic links encountered during
resolution of the path argument.
- ENAMETOOLONG
- The length of a pathname exceeds {PATH_MAX} or a pathname
component is longer than {NAME_MAX}.
- ENOENT
- A component of the path prefix specified by path
does not name an existing directory or path is an empty
string.
- ENOSPC
- The directory that would contain the new file cannot be
extended or the file system is out of file allocation resources.
- ENOTDIR
- A component of the path prefix is not a directory.
- EPERM
- The invoking process does not have appropriate privileges
and the file type is not FIFO-special.
- EROFS
- The directory in which the file is to be created is located
on a read-only file system.
The
mknod() function may fail if:
- ELOOP
- More than {SYMLOOP_MAX} symbolic links were encountered
during resolution of the path argument.
- ENAMETOOLONG
- Pathname resolution of a symbolic link produced an
intermediate result whose length exceeds {PATH_MAX}.
The following sections are informative.
The following example shows how to create a FIFO special file named
/home/cnd/mod_done, with read/write permissions for owner, and with
read permissions for group and others.
#include <sys/types.h>
#include <sys/stat.h>
dev_t dev;
int status;
...
status = mknod("/home/cnd/mod_done", S_IFIFO | S_IWUSR |
S_IRUSR | S_IRGRP | S_IROTH, dev);
The
mkfifo() function is preferred over this function for making FIFO
special files.
The POSIX.1-1990 standard required that the group ID of a newly created file be
set to the group ID of its parent directory or to the effective group ID of
the creating process. FIPS 151-2 required that implementations provide a way
to have the group ID be set to the group ID of the containing directory, but
did not prohibit implementations also supporting a way to set the group ID to
the effective group ID of the creating process. Conforming applications should
not assume which group ID will be used. If it matters, an application can use
chown() to set the group ID after the file is created, or determine
under what conditions the implementation will set the desired group ID.
None.
chmod() ,
creat() ,
exec() ,
mkdir() ,
mkfifo() ,
open() ,
stat() ,
umask() , the Base
Definitions volume of IEEE Std 1003.1-2001,
<sys/stat.h>
Portions of this text are reprinted and reproduced in electronic form from IEEE
Std 1003.1, 2003 Edition, Standard for Information Technology -- Portable
Operating System Interface (POSIX), The Open Group Base Specifications Issue
6, Copyright (C) 2001-2003 by the Institute of Electrical and Electronics
Engineers, Inc and The Open Group. In the event of any discrepancy between
this version and the original IEEE and The Open Group Standard, the original
IEEE and The Open Group Standard is the referee document. The original
Standard can be obtained online at http://www.opengroup.org/unix/online.html
.