<html lang="en">
<head>
<title>FIFO Special Files - The GNU C Library</title>
<meta http-equiv="Content-Type" content="text/html">
<meta name="description" content="The GNU C Library">
<meta name="generator" content="makeinfo 4.13">
<link title="Top" rel="start" href="index.html#Top">
<link rel="up" href="Pipes-and-FIFOs.html#Pipes-and-FIFOs" title="Pipes and FIFOs">
<link rel="prev" href="Pipe-to-a-Subprocess.html#Pipe-to-a-Subprocess" title="Pipe to a Subprocess">
<link rel="next" href="Pipe-Atomicity.html#Pipe-Atomicity" title="Pipe Atomicity">
<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
<!--
This file documents the GNU C library.

This is Edition 0.12, last updated 2007-10-27,
of `The GNU C Library Reference Manual', for version
2.8 (Sourcery G++ Lite 2011.03-41).

Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002,
2003, 2007, 2008, 2010 Free Software Foundation, Inc.

Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3 or
any later version published by the Free Software Foundation; with the
Invariant Sections being ``Free Software Needs Free Documentation''
and ``GNU Lesser General Public License'', the Front-Cover texts being
``A GNU Manual'', and with the Back-Cover Texts as in (a) below.  A
copy of the license is included in the section entitled "GNU Free
Documentation License".

(a) The FSF's Back-Cover Text is: ``You have the freedom to
copy and modify this GNU manual.  Buying copies from the FSF
supports it in developing GNU and promoting software freedom.''-->
<meta http-equiv="Content-Style-Type" content="text/css">
<style type="text/css"><!--
  pre.display { font-family:inherit }
  pre.format  { font-family:inherit }
  pre.smalldisplay { font-family:inherit; font-size:smaller }
  pre.smallformat  { font-family:inherit; font-size:smaller }
  pre.smallexample { font-size:smaller }
  pre.smalllisp    { font-size:smaller }
  span.sc    { font-variant:small-caps }
  span.roman { font-family:serif; font-weight:normal; } 
  span.sansserif { font-family:sans-serif; font-weight:normal; } 
--></style>
<link rel="stylesheet" type="text/css" href="../cs.css">
</head>
<body>
<div class="node">
<a name="FIFO-Special-Files"></a>
<p>
Next:&nbsp;<a rel="next" accesskey="n" href="Pipe-Atomicity.html#Pipe-Atomicity">Pipe Atomicity</a>,
Previous:&nbsp;<a rel="previous" accesskey="p" href="Pipe-to-a-Subprocess.html#Pipe-to-a-Subprocess">Pipe to a Subprocess</a>,
Up:&nbsp;<a rel="up" accesskey="u" href="Pipes-and-FIFOs.html#Pipes-and-FIFOs">Pipes and FIFOs</a>
<hr>
</div>

<h3 class="section">15.3 FIFO Special Files</h3>

<p><a name="index-creating-a-FIFO-special-file-1626"></a><a name="index-interprocess-communication_002c-with-FIFO-1627"></a>
A FIFO special file is similar to a pipe, except that it is created in a
different way.  Instead of being an anonymous communications channel, a
FIFO special file is entered into the file system by calling
<code>mkfifo</code>.

   <p>Once you have created a FIFO special file in this way, any process can
open it for reading or writing, in the same way as an ordinary file. 
However, it has to be open at both ends simultaneously before you can
proceed to do any input or output operations on it.  Opening a FIFO for
reading normally blocks until some other process opens the same FIFO for
writing, and vice versa.

   <p>The <code>mkfifo</code> function is declared in the header file
<samp><span class="file">sys/stat.h</span></samp>. 
<a name="index-sys_002fstat_002eh-1628"></a>
<!-- sys/stat.h -->
<!-- POSIX.1 -->

<div class="defun">
&mdash; Function: int <b>mkfifo</b> (<var>const char *filename, mode_t mode</var>)<var><a name="index-mkfifo-1629"></a></var><br>
<blockquote><p>The <code>mkfifo</code> function makes a FIFO special file with name
<var>filename</var>.  The <var>mode</var> argument is used to set the file's
permissions; see <a href="Setting-Permissions.html#Setting-Permissions">Setting Permissions</a>.

        <p>The normal, successful return value from <code>mkfifo</code> is <code>0</code>.  In
the case of an error, <code>-1</code> is returned.  In addition to the usual
file name errors (see <a href="File-Name-Errors.html#File-Name-Errors">File Name Errors</a>), the following
<code>errno</code> error conditions are defined for this function:

          <dl>
<dt><code>EEXIST</code><dd>The named file already exists.

          <br><dt><code>ENOSPC</code><dd>The directory or file system cannot be extended.

          <br><dt><code>EROFS</code><dd>The directory that would contain the file resides on a read-only file
system. 
</dl>
        </p></blockquote></div>

   </body></html>

