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 .