---
name: "gfs_pio_readline"
section: "3"
platform: "linux"
package: "libgfarm-dev"
version: "2.4.1-1.1"
release: "Debian 7 (Wheezy)"
platforms: ["linux"]
url: "https://new.carta.tech/gfs_pio_readline"
---

# gfs\_pio\_readline(3)

read one line

## NAME

gfs\_pio\_readline - read one line

## SYNOPSIS

**#include \<gfarm/gfarm.h\>**

**char \*gfs\_pio\_readline (GFS\_File** *f***, char \*\****bufp***, size\_t \****sizep***, size\_t \****lenp***);**

## DESCRIPTION

**gfs\_pio\_readline()** reads one line from the file specified by the parameter *gf*.

Parameter *bufp* specifies an address of a pointer variable initialzed by NULL at first. **gfs\_pio\_readline()** allocates a buffer for I/O dynamically, and stores the address of the buffer to this variable pointed by *bufp*. Parameter *sizep* specifies an address of a size\_t variable initialized by 0. This size\_t variable is used to record the size of the buffer. Or, you can specify a buffer allocated by [malloc(3)](/malloc/3.md) in the variable pointed by the parameter *bufp*. In this case, you have to specify the size of the allocated buffer by the parameter *sizep*. If the length of the line exceeds the size of the buffer,  the buffer will be automatically [realloc(3)](/realloc/3.md)ed, and the variable pointed by *bufp* and  *sizep* will be updated respectively. Note that you are responsible to [free(3)](/free/3.md) this buffer.

This function returns the length of the line to a variable pointed by the parameter *lenp*. This length includes newline character.

Just like [gfs\_pio\_gets(3)](/gfs_pio_gets/3.md), this function doesn't remove newline character at the end of lines. Also, this function always appends '\\0' at the end of strings. You can deal with lines which include '\\0' character by using the variable pointed by the parameter *lenp*.

If the file reaches its end, the length of the result string becomes 0.

This function is equivalent to  gfs\_pio\_readdelim(f, bufp, sizep, lenp, "\\n", 1).

## RETURN VALUES

- **NULL**

  The function terminated successfully.

- **GFARM\_ERR\_NO\_MEMORY**

  Insufficient memory was available.

  Note that you need to [free(3)](/free/3.md) the buffer pointed by the parameter *bufp*

- **Others**

  An error except the above occurred.  The reason is shown by its pointed strings.

## EXAMPLES

### EXAMPLE OF GFS\_PIO\_READLINE FUNCTION

```
#include <stdio.h>
#include <stdlib.h>
#include <gfarm/gfarm.h>
int
main(int argc, char **argv)
{
	char *e;
	GFS_File gf;
	size_t bufsize = 0, len;
	char *buffer = NULL;
	e = gfarm_initialize(&argc, &argv);
	if (e != NULL) {
		fprintf(stderr, "gfarm_initialize: %s\n", e);
		return (EXIT_FAILURE);
	}
	if (argc <= 1) {
		fprintf(stderr, "missing gfarm filename\n");
		return (EXIT_FAILURE);
	}
	e = gfs_pio_open(argv[1], GFARM_FILE_RDONLY, &gf);
	if (e != NULL) {
		fprintf(stderr, "%s: %s\n", argv[1], e);
		return (EXIT_FAILURE);
	}
	e = gfs_pio_set_view_global(gf, 0);
	if (e != NULL) {
		fprintf(stderr, "%s: gfs_pio_set_view_global: %s\n",
		    argv[1], e);
		return (EXIT_FAILURE);
	}
	while ((e = gfs_pio_readline(gf, &buffer, &bufsize, &len))
	    == NULL && len > 0) {
		printf("<%6d/%6d >%s", len, bufsize, buffer);
	}
	if (buffer != NULL)
		free(buffer);
	if (e != NULL) {
		fprintf(stderr, "ERROR: %s\n", e);
		return (EXIT_FAILURE);
	}
	e = gfs_pio_close(gf);
	if (e != NULL) {
		fprintf(stderr, "gfs_pio_close: %s\n", e);
		return (EXIT_FAILURE);
	}
	e = gfarm_terminate();
	if (e != NULL) {
		fprintf(stderr, "gfarm_initialize: %s\n", e);
		return (EXIT_FAILURE);
	}
	return (EXIT_SUCCESS);
}
```

## SEE ALSO

[**gfs\_pio\_open**(3)](/gfs_pio_open/3.md), [**gfs\_pio\_getline**(3)](/gfs_pio_getline/3.md), [**gfs\_pio\_gets**(3)](/gfs_pio_gets/3.md), [**gfs\_pio\_readdelim**(3)](/gfs_pio_readdelim/3.md)
