2004-11-03 13:51:07 +00:00
|
|
|
.\" Copyright (c) 2001 John Levon <moz@compsoc.man.ac.uk>
|
|
|
|
.\" Based in part on GNU libc documentation
|
|
|
|
.\"
|
|
|
|
.\" Permission is granted to make and distribute verbatim copies of this
|
|
|
|
.\" manual provided the copyright notice and this permission notice are
|
|
|
|
.\" preserved on all copies.
|
|
|
|
.\"
|
|
|
|
.\" Permission is granted to copy and distribute modified versions of this
|
|
|
|
.\" manual under the conditions for verbatim copying, provided that the
|
|
|
|
.\" entire resulting derived work is distributed under the terms of a
|
|
|
|
.\" permission notice identical to this one.
|
|
|
|
.\"
|
|
|
|
.\" Since the Linux kernel and libraries are constantly changing, this
|
|
|
|
.\" manual page may be incorrect or out-of-date. The author(s) assume no
|
|
|
|
.\" responsibility for errors or omissions, or for damages resulting from
|
|
|
|
.\" the use of the information contained herein. The author(s) may not
|
|
|
|
.\" have taken the same level of care in the production of this manual,
|
|
|
|
.\" which is licensed free of charge, as they might when working
|
|
|
|
.\" professionally.
|
|
|
|
.\"
|
|
|
|
.\" Formatted or processed versions of this manual, if unaccompanied by
|
|
|
|
.\" the source, must acknowledge the copyright and authors of this work.
|
|
|
|
.\" License.
|
2006-05-18 22:24:03 +00:00
|
|
|
.TH GETLINE 3 2006-05-17 "GNU" "Linux Programmer's Manual"
|
2004-11-03 13:51:07 +00:00
|
|
|
.SH NAME
|
|
|
|
getline, getdelim \- delimited string input
|
|
|
|
.SH SYNOPSIS
|
|
|
|
.nf
|
|
|
|
.B #define _GNU_SOURCE
|
|
|
|
.B #include <stdio.h>
|
|
|
|
.sp
|
|
|
|
.BI "ssize_t getline(char **" lineptr ", size_t *" n ", FILE *" stream );
|
2006-07-20 16:16:51 +00:00
|
|
|
.br
|
2004-11-03 13:51:07 +00:00
|
|
|
.BI "ssize_t getdelim(char **" lineptr ", size_t *" n ", int " delim ", FILE *" stream );
|
|
|
|
.SH DESCRIPTION
|
2005-10-19 07:07:02 +00:00
|
|
|
.BR getline ()
|
2006-05-18 22:24:03 +00:00
|
|
|
reads an entire line from \fIstream\fP,
|
|
|
|
storing the address of the buffer containing the text into
|
2005-07-19 15:36:19 +00:00
|
|
|
.IR "*lineptr" .
|
2006-05-18 22:24:03 +00:00
|
|
|
The buffer is null-terminated and includes the newline character, if
|
|
|
|
one was found.
|
2004-11-03 13:51:07 +00:00
|
|
|
|
2006-03-23 02:13:08 +00:00
|
|
|
.\" FIXME what happens if *lineptr is NULL but *n isn't zero ?
|
2004-11-03 13:51:07 +00:00
|
|
|
.\" Answer: *n is ignored and a new buffer is allocated
|
|
|
|
If
|
|
|
|
.IR "*lineptr"
|
2006-05-18 22:24:03 +00:00
|
|
|
is NULL, then
|
2005-10-19 07:07:02 +00:00
|
|
|
.BR getline ()
|
2006-05-18 22:24:03 +00:00
|
|
|
will allocate a buffer for storing the line, which should be freed
|
2004-11-03 13:51:07 +00:00
|
|
|
by the user program.
|
|
|
|
Alternatively, before calling
|
2005-10-19 07:29:28 +00:00
|
|
|
.BR getline (),
|
2004-11-03 13:51:07 +00:00
|
|
|
.IR "*lineptr"
|
|
|
|
can contain a pointer to a
|
2005-10-19 07:29:28 +00:00
|
|
|
.BR malloc ()\-allocated
|
2004-11-03 13:51:07 +00:00
|
|
|
buffer
|
|
|
|
.IR "*n"
|
2006-05-18 22:24:03 +00:00
|
|
|
bytes in size. If the buffer is not large enough to hold the line,
|
2005-10-19 07:07:02 +00:00
|
|
|
.BR getline ()
|
2006-05-18 22:24:03 +00:00
|
|
|
resizes it with
|
2005-10-19 07:29:28 +00:00
|
|
|
.BR realloc (),
|
2004-11-03 13:51:07 +00:00
|
|
|
updating
|
|
|
|
.IR "*lineptr"
|
|
|
|
and
|
|
|
|
.IR "*n"
|
|
|
|
as necessary. In either case, on a successful call,
|
|
|
|
.IR "*lineptr"
|
|
|
|
and
|
|
|
|
.IR "*n"
|
2006-05-18 22:24:03 +00:00
|
|
|
will be updated to reflect the buffer address and allocated size respectively.
|
2004-11-03 13:51:07 +00:00
|
|
|
|
2005-10-19 07:07:02 +00:00
|
|
|
.BR getdelim ()
|
2004-11-03 13:51:07 +00:00
|
|
|
works like
|
2005-10-19 07:29:28 +00:00
|
|
|
.BR getline (),
|
2004-11-03 13:51:07 +00:00
|
|
|
except a line delimiter other than newline can be specified as the
|
|
|
|
.IR delimiter
|
|
|
|
argument. As with
|
2005-10-19 07:29:28 +00:00
|
|
|
.BR getline (),
|
2004-11-03 13:51:07 +00:00
|
|
|
a delimiter character is not added if one was not present
|
|
|
|
in the input before end of file was reached.
|
|
|
|
.SH "RETURN VALUE"
|
|
|
|
On success,
|
2005-10-19 07:29:28 +00:00
|
|
|
.BR getline ()
|
2004-11-03 13:51:07 +00:00
|
|
|
and
|
2005-10-19 16:30:05 +00:00
|
|
|
.BR getdelim ()
|
2004-11-03 13:51:07 +00:00
|
|
|
return the number of characters read, including the delimiter character,
|
2006-01-13 02:09:44 +00:00
|
|
|
but not including the terminating null byte. This value can be used
|
|
|
|
to handle embedded null bytes in the line read.
|
2004-11-03 13:51:07 +00:00
|
|
|
|
|
|
|
Both functions return \-1 on failure to read a line (including end of file
|
|
|
|
condition).
|
|
|
|
.SH ERRORS
|
|
|
|
.TP
|
|
|
|
.B EINVAL
|
|
|
|
Bad parameters
|
|
|
|
.RI ( n
|
|
|
|
or
|
|
|
|
.I lineptr
|
|
|
|
is NULL, or
|
|
|
|
.I stream
|
|
|
|
is not valid).
|
|
|
|
.SH "EXAMPLE"
|
|
|
|
.nf
|
|
|
|
#define _GNU_SOURCE
|
|
|
|
#include <stdio.h>
|
|
|
|
#include <stdlib.h>
|
|
|
|
|
|
|
|
int main(void)
|
|
|
|
{
|
|
|
|
FILE * fp;
|
|
|
|
char * line = NULL;
|
|
|
|
size_t len = 0;
|
|
|
|
ssize_t read;
|
|
|
|
fp = fopen("/etc/motd", "r");
|
|
|
|
if (fp == NULL)
|
|
|
|
exit(EXIT_FAILURE);
|
2005-07-06 12:57:38 +00:00
|
|
|
while ((read = getline(&line, &len, fp)) != \-1) {
|
2004-11-03 13:51:07 +00:00
|
|
|
printf("Retrieved line of length %zu :\en", read);
|
|
|
|
printf("%s", line);
|
|
|
|
}
|
|
|
|
if (line)
|
|
|
|
free(line);
|
|
|
|
return EXIT_SUCCESS;
|
|
|
|
}
|
|
|
|
.fi
|
|
|
|
.SH "CONFORMING TO"
|
2005-10-19 14:48:35 +00:00
|
|
|
Both
|
|
|
|
.BR getline ()
|
|
|
|
and
|
|
|
|
.BR getdelim ()
|
|
|
|
are GNU extensions.
|
2004-11-03 13:51:07 +00:00
|
|
|
They are available since libc 4.6.27.
|
|
|
|
.SH "SEE ALSO"
|
|
|
|
.BR read (2),
|
|
|
|
.BR fgets (3),
|
|
|
|
.BR fopen (3),
|
|
|
|
.BR fread (3),
|
|
|
|
.BR gets (3),
|
|
|
|
.BR scanf (3)
|