### 14.11 Making Special Files ¶

The `mknod` function is the primitive for making special files, such as files that correspond to devices. The GNU C Library includes this function for compatibility with BSD.

The prototype for `mknod` is declared in `sys/stat.h`.

Function: `int` mknod `(const char *filename, mode_t mode, dev_t dev)` ¶

  Preliminary: | MT-Safe | AS-Safe | AC-Safe | See POSIX Safety Concepts.

  The `mknod` function makes a special file with name filename. The mode specifies the mode of the file, and may include the various special file bits, such as `S_IFCHR` (for a character special file) or `S_IFBLK` (for a block special file). See Testing the Type of a File.

  The dev argument specifies which device the special file refers to. Its exact interpretation depends on the kind of special file being created.

  The return value is `0` on success and `-1` on error. In addition to the usual file name errors (see File Name Errors), the following `errno` error conditions are defined for this function:

  `EPERM`

    The calling process is not privileged. Only the superuser can create special files.

  `ENOSPC`

    The directory or file system that would contain the new file is full and cannot be extended.

  `EROFS`

    The directory containing the new file can’t be modified because it’s on a read-only file system.

  `EEXIST`

    There is already a file named filename. If you want to replace this file, you must remove the old file explicitly first.