Provided by: libgfarm-dev_2.4.1-1.1ubuntu1_amd64 bug

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)