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)