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) 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)ed, and the variable pointed by
bufp and sizep will be updated respectively. Note that you are
responsible to free(3) 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), 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) 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_getline(3), gfs_pio_gets(3),
gfs_pio_readdelim(3)