blob: 52e064356fa4039f8e4d715ba7c43e899120fd5c [file] [log] [blame]
<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>