
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
        "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"><script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<!-- MyFirstUnitAd -->
<ins class="adsbygoogle"
     style="display:inline-block;width:970px;height:250px"
     data-ad-client="ca-pub-5778386704669218"
     data-ad-slot="1503492166"></ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script>

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <link rel="stylesheet" type="text/css" href="../../../style.css" title="style" />
    <link rel="stylesheet" type="text/css" href="../style.css" title="style" />
    <meta http-equiv="content-type" content="text/html;charset=utf-8" />

    <title>getline(3) - Linux manual page</title>
</head>

<body>

<div class="page-top"><a id="top_of_page"></a></div>
<!--%%%TOP_BAR%%%-->
    <div class="nav-bar">
        <table class="nav-table">
            <tr>
                <td class="nav-cell">
                    <p class="nav-text">
                        <a href="http://man7.org/index.html">man7.org</a> &gt; Linux &gt; <a href="../index.html">man-pages</a>
                    </p>
                </td>
                <td class="training-cell">
                    <p class="training-text"><a class="training-link" href="http://man7.org/training/">Linux/UNIX system programming training</a></p>
                </td>
            </tr>
        </table>
    </div>

<hr class="nav-end" />

<!--%%%PAGE_START%%%-->


<table class="sec-table">
<tr>
    <td>
        <p class="section-dir">
<a href="getline.3.html#NAME">NAME</a> | <a href="getline.3.html#SYNOPSIS">SYNOPSIS</a> | <a href="getline.3.html#DESCRIPTION">DESCRIPTION</a> | <a href="getline.3.html#RETURN_VALUE">RETURN&nbsp;VALUE</a> | <a href="getline.3.html#ERRORS">ERRORS</a> | <a href="getline.3.html#ATTRIBUTES">ATTRIBUTES</a> | <a href="getline.3.html#CONFORMING_TO">CONFORMING&nbsp;TO</a> | <a href="getline.3.html#EXAMPLE">EXAMPLE</a> | <a href="getline.3.html#SEE_ALSO">SEE&nbsp;ALSO</a> | <a href="getline.3.html#COLOPHON">COLOPHON</a>
        </p>
    </td>
    <td class="search-box">
        <div class="man-search-box">

            <form method="get" action="http://www.google.com/search">
                <fieldset class="man-search">
                    <input type="text" name="q" size="10" maxlength="255" value="" />
                    <input type="hidden" name="sitesearch" value="man7.org/linux/man-pages" />
                    <input type="submit" name="sa" value="Search online pages" />
                </fieldset>
            </form>

        </div>
    </td>
    <td> </td>
</tr>
</table>

<pre>
<span class="headline">GETLINE(3)                Linux Programmer's Manual               GETLINE(3)</span>
</pre>
<h2><a id="NAME" href="getline.3.html#NAME"></a>NAME  &nbsp; &nbsp; &nbsp; &nbsp; <a href="getline.3.html#top_of_page"><span class="top-link">top</span></a></h2><pre>
       getline, getdelim - delimited string input
</pre>
<h2><a id="SYNOPSIS" href="getline.3.html#SYNOPSIS"></a>SYNOPSIS  &nbsp; &nbsp; &nbsp; &nbsp; <a href="getline.3.html#top_of_page"><span class="top-link">top</span></a></h2><pre>
       <b>#include &lt;stdio.h&gt;</b>

       <b>ssize_t getline(char **</b><i>lineptr</i><b>, size_t *</b><i>n</i><b>, FILE *</b><i>stream</i><b>);</b>

       <b>ssize_t getdelim(char **</b><i>lineptr</i><b>, size_t *</b><i>n</i><b>, int </b><i>delim</i><b>, FILE *</b><i>stream</i><b>);</b>

   Feature Test Macro Requirements for glibc (see <a href="../man7/feature_test_macros.7.html">feature_test_macros(7)</a>):

       <b>getline</b>(), <b>getdelim</b>():
           Since glibc 2.10:
               _POSIX_C_SOURCE &gt;= 200809L
           Before glibc 2.10:
               _GNU_SOURCE
</pre>
<h2><a id="DESCRIPTION" href="getline.3.html#DESCRIPTION"></a>DESCRIPTION  &nbsp; &nbsp; &nbsp; &nbsp; <a href="getline.3.html#top_of_page"><span class="top-link">top</span></a></h2><pre>
       <b>getline</b>() reads an entire line from <i>stream</i>, storing the address of
       the buffer containing the text into <i>*lineptr</i>.  The buffer is null-
       terminated and includes the newline character, if one was found.

       If <i>*lineptr</i> is set to NULL and <i>*n</i> is set 0 before the call, then
       <b>getline</b>() will allocate a buffer for storing the line.  This buffer
       should be freed by the user program even if <b>getline</b>() failed.

       Alternatively, before calling <b>getline</b>(), <i>*lineptr</i> can contain a
       pointer to a <a href="malloc.3.html">malloc(3)</a>-allocated buffer <i>*n</i> bytes in size.  If the
       buffer is not large enough to hold the line, <b>getline</b>() resizes it
       with <a href="realloc.3.html">realloc(3)</a>, updating <i>*lineptr</i> and <i>*n</i> as necessary.

       In either case, on a successful call, <i>*lineptr</i> and <i>*n</i> will be updated
       to reflect the buffer address and allocated size respectively.

       <b>getdelim</b>() works like <b>getline</b>(), except that a line delimiter other
       than newline can be specified as the <i>delimiter</i> argument.  As with
       <b>getline</b>(), a delimiter character is not added if one was not present
       in the input before end of file was reached.
</pre>
<h2><a id="RETURN_VALUE" href="getline.3.html#RETURN_VALUE"></a>RETURN VALUE  &nbsp; &nbsp; &nbsp; &nbsp; <a href="getline.3.html#top_of_page"><span class="top-link">top</span></a></h2><pre>
       On success, <b>getline</b>() and <b>getdelim</b>() return the number of characters
       read, including the delimiter character, but not including the
       terminating null byte ('\0').  This value can be used to handle
       embedded null bytes in the line read.

       Both functions return -1 on failure to read a line (including end-of-
       file condition).  In the event of an error, <i><a href="errno.3.html">errno</a></i> is set to indicate
       the cause.
</pre>
<h2><a id="ERRORS" href="getline.3.html#ERRORS"></a>ERRORS  &nbsp; &nbsp; &nbsp; &nbsp; <a href="getline.3.html#top_of_page"><span class="top-link">top</span></a></h2><pre>
       <b>EINVAL </b>Bad arguments (<i>n</i> or <i>lineptr</i> is NULL, or <i>stream</i> is not valid).

       <b>ENOMEM </b>Allocation or reallocation of the line buffer failed.
</pre>
<h2><a id="ATTRIBUTES" href="getline.3.html#ATTRIBUTES"></a>ATTRIBUTES  &nbsp; &nbsp; &nbsp; &nbsp; <a href="getline.3.html#top_of_page"><span class="top-link">top</span></a></h2><pre>
       For an explanation of the terms used in this section, see
       <a href="../man7/attributes.7.html">attributes(7)</a>.

       ┌──────────────────────┬───────────────┬─────────┐
       │<b>Interface             </b>│ <b>Attribute     </b>│ <b>Value   </b>│
       ├──────────────────────┼───────────────┼─────────┤
       │<b>getline</b>(), <b>getdelim</b>() │ Thread safety │ MT-Safe │
       └──────────────────────┴───────────────┴─────────┘
</pre>
<h2><a id="CONFORMING_TO" href="getline.3.html#CONFORMING_TO"></a>CONFORMING TO  &nbsp; &nbsp; &nbsp; &nbsp; <a href="getline.3.html#top_of_page"><span class="top-link">top</span></a></h2><pre>
       Both <b>getline</b>() and <b>getdelim</b>() were originally GNU extensions.  They
       were standardized in POSIX.1-2008.
</pre>
<h2><a id="EXAMPLE" href="getline.3.html#EXAMPLE"></a>EXAMPLE  &nbsp; &nbsp; &nbsp; &nbsp; <a href="getline.3.html#top_of_page"><span class="top-link">top</span></a></h2><pre>
       #define _GNU_SOURCE
       #include &lt;stdio.h&gt;
       #include &lt;stdlib.h&gt;

       int
       main(int argc, char *argv[])
       {
           FILE *stream;
           char *line = NULL;
           size_t len = 0;
           ssize_t nread;

           if (argc != 2) {
               fprintf(stderr, "Usage: %s &lt;file&gt;\n", argv[0]);
               exit(EXIT_FAILURE);
           }

           stream = fopen(argv[1], "r");
           if (stream == NULL) {
               perror("fopen");
               exit(EXIT_FAILURE);
           }

           while ((nread = getline(&amp;line, &amp;len, stream)) != -1) {
               printf("Retrieved line of length %zu:\n", nread);
               fwrite(line, nread, 1, stdout);
           }

           free(line);
           fclose(stream);
           exit(EXIT_SUCCESS);
       }
</pre>
<h2><a id="SEE_ALSO" href="getline.3.html#SEE_ALSO"></a>SEE ALSO  &nbsp; &nbsp; &nbsp; &nbsp; <a href="getline.3.html#top_of_page"><span class="top-link">top</span></a></h2><pre>
       <a href="../man2/read.2.html">read(2)</a>, <a href="fgets.3.html">fgets(3)</a>, <a href="fopen.3.html">fopen(3)</a>, <a href="fread.3.html">fread(3)</a>, <a href="scanf.3.html">scanf(3)</a>
</pre>
<h2><a id="COLOPHON" href="getline.3.html#COLOPHON"></a>COLOPHON  &nbsp; &nbsp; &nbsp; &nbsp; <a href="getline.3.html#top_of_page"><span class="top-link">top</span></a></h2><pre>
       This page is part of release 4.15 of the Linux <i>man-pages</i> project.  A
       description of the project, information about reporting bugs, and the
       latest version of this page, can be found at
       <a href="https://www.kernel.org/doc/man-pages/">https://www.kernel.org/doc/man-pages/</a>.

<span class="footline">GNU                              2017-09-15                       GETLINE(3)</span>
</pre>

<hr class="end-man-text" />
<p>Pages that refer to this page: 
    <a href="fgetc.3.html">fgetc(3)</a>,&nbsp; 
    <a href="gets.3.html">gets(3)</a>,&nbsp; 
    <a href="rpmatch.3.html">rpmatch(3)</a>
</p>
<hr/>

<p class="page-copyright"><a href="getline.3.license.html">Copyright and license for this manual page</a></p> 
<hr class="start-footer" />

<div class="footer"> 

<table class="colophon-table">
    <tr>
    <td class="pub-info">
        <p>
            HTML rendering created 2018-02-02
            by <a href="http://man7.org/mtk/index.html">Michael Kerrisk</a>, 
            author of 
            <a href="http://man7.org/tlpi/"><em>The Linux Programming Interface</em></a>, 
            maintainer of the 
            <a href="https://www.kernel.org/doc/man-pages/">Linux <em>man-pages</em> project</a>.
        </p>
        <p>
            For details of in-depth
            <strong>Linux/UNIX system programming training courses</strong>
            that I teach, look <a href="http://man7.org/training/">here</a>.
        </p>
        <p>
            Hosting by <a href="http://www.jambit.com/index_en.html">jambit GmbH</a>.
        </p>
        <p>
            <a href="http://validator.w3.org/check?uri=referer">
            <img src="http://www.w3.org/Icons/valid-xhtml11"
                alt="Valid XHTML 1.1" height="31" width="88" />
            </a>
        </p>
    </td>
    <td class="colophon-divider">
    </td>
    <td class="tlpi-cover">
        <a href="http://man7.org/tlpi/"><img src="../../../tlpi/cover/TLPI-front-cover-vsmall.png" alt="Cover of TLPI" /></a>
    </td>
    </tr>
</table>

</div>

<hr class="end-footer" />



<!--BEGIN-SITETRACKING-->
<!-- SITETRACKING.man7.org_linux_man-pages -->

<!-- Start of StatCounter Code (xhtml) -->

<script type="text/javascript">
//<![CDATA[
var sc_project=7422636; 
var sc_invisible=1; 
var sc_security="9b6714ff"; 
//]]>
</script>
<script type="text/javascript"
src="http://www.statcounter.com/counter/counter_xhtml.js"></script>
<noscript><div class="statcounter"><a title="website
statistics" href="http://statcounter.com/"
class="statcounter"><img class="statcounter"
src="http://c.statcounter.com/7422636/0/9b6714ff/1/"
alt="website statistics" /></a></div></noscript>

<!-- End of StatCounter Code -->


<!-- Start of Google Analytics Code -->

<script type="text/javascript">

  var _gaq = _gaq || [];
  _gaq.push(['_setAccount', 'UA-9830363-8']);
  _gaq.push(['_trackPageview']);

  (function() {
    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
  })();

</script>

<!-- End of Google Analytics Code -->

<!--END-SITETRACKING-->

</body>
</html>
