MKNOD(2V) — SYSTEM CALLS
NAME
mknod, mkfifo − make a special file
SYNOPSIS
#include <sys/types.h>
#include <sys/stat.h>
int mknod(path, mode, dev)
char ∗path;
int mode, dev;
int mkfifo(path, mode)
char ∗path;
mode_t mode;
DESCRIPTION
mknod() creates a new file named by the path name pointed to by path. The mode of the new file (including file type bits) is initialized from mode. The values of the file type bits which are permitted are:
#define S_IFCHR0020000 /∗ character special ∗/
#define S_IFBLK0060000 /∗ block special ∗/
#define S_IFREG0100000 /∗ regular ∗/
#define S_IFIFO0010000 /∗ FIFO special ∗/
Values of mode other than those above are undefined and should not be used.
The access permissions of the mode are modified by the process’s mode mask (see umask(2V)).
The owner ID of the file is set to the effective user ID of the process. The group ID of the file is set to either:
• the effective group ID of the process, if the filesystem was not mounted with the BSD file-creation semantics flag (see mount(2V)) and the set-gid bit of the parent directory is clear, or
• the group ID of the directory in which the file is created.
If mode indicates a block or character special file, dev is a configuration dependent specification of a character or block I/O device. If mode does not indicate a block special or character special device, dev is ignored.
mknod() may be invoked only by the super-user for file types other than FIFO special.
mkfifo() creates a new FIFO special file named by the pathname pointed to by path. The access permissions of the new FIFO are initialized from mode. The access permissions of mode are modified by the process’s file creation mask, see umask(2V). Bits in mode other than the access permissions are ignored.
The FIFO’s owner ID is set to the process’s effective user ID. The FIFO’s group ID is set to the group ID of the directory in which the FIFO is being created or to the process’s effective group ID.
Upon successful completion, the mkfifo() function marks 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 are marked for update.
RETURN VALUES
mknod() returns:
0 on success.
−1 on failure and sets errno to indicate the error.
mkfifo() returns:
0 on success.
−1 on failure and sets errno to indicate the error. No FIFO is created.
ERRORS
mknod() fails and the file mode remains unchanged if:
EACCES Search permission is denied for a component of the path prefix of path.
EDQUOT The directory in which the entry for the new file is being placed cannot be extended because the user’s quota of disk blocks on the file system containing the directory has been exhausted.
EDQUOT The user’s quota of inodes on the file system on which the node is being created has been exhausted.
EEXIST The file referred to by path exists.
EFAULT path points outside the process’s allocated address space.
EIO An I/O error occurred while reading from or writing to the file system.
EISDIR The specified mode would have created a directory.
ELOOP Too many symbolic links were encountered in translating path.
ENAMETOOLONG The length of the path argument exceeds {PATH_MAX}.
A pathname component is longer than {NAME_MAX} (see sysconf(2V)) while {_POSIX_NO_TRUNC} is in effect (see pathconf(2V)).
ENOENT A component of the path prefix of path does not exist.
ENOSPC The directory in which the entry for the new file is being placed cannot be extended because there is no space left on the file system containing the directory.
ENOSPC There are no free inodes on the file system on which the file is being created.
ENOTDIR A component of the path prefix of path is not a directory.
EPERM An attempt was made to create a file of type other than FIFO special and the process’s effective user ID is not super-user.
EROFS The file referred to by path resides on a read-only file system.
mkfifo() may set errno to:
EACCES A component of the path prefix denies search permission.
EEXIST The named file already exists.
ENAMETOOLONG The length of the path string exceeds {PATH_MAX}.
A pathname component is longer than {NAME_MAX} while {_POSIX_NO_TRUNC} is in effect (see pathconf(2V)).
ENOENT A component of the path prefix does not exist.
path points to an empty string.
ENOSPC The directory that would contain the new file cannot be extended.
The file system is out of file allocation resources.
ENOTDIR A component of the path prefix is not a directory.
EROFS The named file resides on a read-only file system.
SEE ALSO
chmod(2V), execve(2V), pipe(2V), stat(2V), umask(2V), write(2V)
Sun Release 4.1 — Last change: 21 January 1990