Provided by: manpages-posix-dev_2.16-1_all bug

NAME

       mkfifo - make a FIFO special file

SYNOPSIS

       #include <sys/stat.h>

       int mkfifo(const char *path, mode_t mode);

DESCRIPTION

       The  mkfifo() function shall create a new FIFO special file named by the pathname pointed to by path. The
       file permission bits of the new FIFO shall be initialized from mode.  The file  permission  bits  of  the
       mode argument shall be modified by the process' file creation mask.

       When bits in mode other than the file permission bits are set, the effect is implementation-defined.

       If path names a symbolic link, mkfifo() shall fail and set errno to [EEXIST].

       The  FIFO's  user ID shall be set to the process' effective user ID.  The FIFO's group ID shall be set to
       the group ID of the parent directory or to the effective group ID of the process.  Implementations  shall
       provide  a way to initialize the FIFO's group ID to the group ID of the parent directory. Implementations
       may, but need not, provide an implementation-defined way  to  initialize  the  FIFO's  group  ID  to  the
       effective group ID of the calling process.

       Upon successful completion, mkfifo() 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.

RETURN VALUE

       Upon  successful  completion,  0  shall  be  returned.  Otherwise, -1 shall be returned, no FIFO shall be
       created, and errno shall be set to indicate the error.

ERRORS

       The mkfifo() function shall fail if:

       EACCES A component of the path prefix denies search permission, or write  permission  is  denied  on  the
              parent directory of the FIFO to be created.

       EEXIST The named file already exists.

       ELOOP  A loop exists in symbolic links encountered during resolution of the path argument.

       ENAMETOOLONG
              The  length  of  the  path  argument  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.

       EROFS  The named file resides on a read-only file system.

       The mkfifo() function may fail if:

       ELOOP  More than {SYMLOOP_MAX} symbolic links were encountered during resolution of the path argument.

       ENAMETOOLONG
              As a result of encountering a symbolic link in resolution of the path argument, the length of  the
              substituted pathname string exceeded {PATH_MAX}.

       The following sections are informative.

EXAMPLES

   Creating a FIFO File
       The  following  example  shows  how  to  create  a  FIFO  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>

              int status;
              ...
              status = mkfifo("/home/cnd/mod_done", S_IWUSR | S_IRUSR |
                  S_IRGRP | S_IROTH);

APPLICATION USAGE

       None.

RATIONALE

       The syntax of this function is intended to maintain  compatibility  with  historical  implementations  of
       mknod().  The  latter  function was included in the 1984 /usr/group standard but only for use in creating
       FIFO special files. The mknod() function was  originally  excluded  from  the  POSIX.1-1988  standard  as
       implementation-defined  and  replaced  by  mkdir() and mkfifo(). The mknod() function is now included for
       alignment with the Single UNIX Specification.

       The POSIX.1-1990 standard required that the group ID of a newly created FIFO 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 FIFO is created, or determine under
       what conditions the implementation will set the desired group ID.

FUTURE DIRECTIONS

       None.

SEE ALSO

       umask() , the Base Definitions volume of IEEE Std 1003.1-2001, <sys/stat.h>, <sys/types.h>

COPYRIGHT

       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 .