NAME¶
gfs_pio_readline - 一行読み込み
SYNOPSIS¶
#include <gfarm/gfarm.h>
char *gfs_pio_readline (GFS_File
f, char **bufp, size_t
* sizep, size_t *lenp);
DESCRIPTION¶
ファイル
gf
から、一行読み込みます。
引数
bufp は、最初は NULL
で初期化されたポインタ変数のアドレスを指定します。
関数
gfs_pio_readline()
は、入出力に用いる
バッファを動的に割り当て、そのアドレスをこのポインタ変数に記録します。
引数
sizep は、0
で初期化した size_t
型の変数
のアドレスを指定します。この変数は、バッファのサイズを記録するために
使われます。
あるいは、malloc(3)
で割り当てたバッファを指すポインタのアドレスを
引数
bufp
に指定することもできます。この場合、
引数
sizep
は、割り当てたバッファのサイズで初期化しておきます。
行の長さがバッファのサイズを越える場合には、バッファは自動的に
realloc(3) され、 引数
bufp
および 引数
sizep
で指定された変数もそれに従って更新されます。
ファイルを読み終わったら、このポインタを
free(3) で解放する必要が
あります。
引数
lenp
の指す変数には、読み込んだ長さを返します。
この長さには、行末記号の分も含みます。
関数
gfs_pio_gets(3)
と同様、この関数は行末の改行記号を削除しません。
また、文字列の終わりを示す
'\0'
文字を、常に付加します。
また、 引数
lenp
の指す変数に返った値を使えば、文字
'\0'
を含む行を扱うこともできます。
EOF は、入力の長さが 0
文字であることで判断します。
この関数は、gfs_pio_readdelim(f, bufp,
sizep, lenp, "\n", 1) と
等価です。
RETURN VALUES¶
- NULL
- 正常終了を示します。
- GFARM_ERR_NO_MEMORY
- メモリ不足のため処理を中止しました。
この場合も、 bufp
の指すポインタ変数の
指す領域を free(3)
する必要がありますから注意してください。
- その他
- 上記以外のエラーが生じたことを示します。
EXAMPLES¶
GFS_PIO_READLINE
関数の使用例¶
#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)