Provided by: manpages-ja-dev_0.5.0.0.20221215+dfsg-1_all bug

名前

       getline, getdelim - 区切り文字までの文字列入力を読み込む

書式

       #include <stdio.h>

       ssize_t getline(char **lineptr, size_t *n, FILE *stream);

       ssize_t getdelim(char **lineptr, size_t *n, int delim, FILE *stream);

   glibc 向けの機能検査マクロの要件 (feature_test_macros(7)  参照):

       getline(), getdelim():
           glibc 2.10 以降:
               _POSIX_C_SOURCE >= 200809L
           glibc 2.10 より前:
               _GNU_SOURCE

説明

       getline()  は stream から 1 行全てを読み込み、テキストが含まれているバッファーのアドレスを
       *lineptr に格納する。 バッファーはヌル文字  (\0)  で終端される。  改行文字が見つかった場合
       は、改行文字もバッファーに格納される。

       *lineptr  が NULL にセットされ、 *n が呼び出し前に 0 にセットされた場合、 getline() は行の
       内容を格納するためのバッファーを確保する。 このバッファーは、  getline()  が失敗した場合で
       あっても、ユーザーのプログラムで解放すべきである。

       別の方法として、 getline()  を呼び出す際に、 *lineptrmalloc(3)  で確保した大きさ *n バ
       イトのバッファーへのポインターを入れて渡すこともできる。  読み込んだ行を保持するのに十分な
       バッファーがない場合、  getline()  は realloc(3)  を使ってバッファーのサイズを変更し、必要
       に応じて *lineptr*n を更新する。

       どちらの場合でも、呼び出しに成功したときには、 *lineptr*n がバッファーのアドレスと割り
       当てたサイズを反映した値に更新される。

       getdelim()   は getline()  と同じように動作するが、改行文字以外の区切り文字を引数 delim に
       指定することができる。 getline()  と同様に、ファイル終端に達するまでに入力行に区切り文字が
       見付からない場合は、 区切り文字をバッファーに追加しない。

返り値

       成功した場合、 getline()  と getdelim()  は読み込んだ文字数を返す。 文字数には区切り文字は
       含まれるが、終端に使うヌルバイト ('\0') は含まれない。  この値によって、読み込んだ行に含ま
       れるヌルバイトを操作することができる。

       どちらの関数も、行の読み込みに失敗した場合には  -1  を返す (ファイルの終端に達した場合にも
       -1 を返す)。 エラーが発生した場合には、 errno にエラーの原因を示す値が設定される。

エラー

       EINVAL 引数が不正である (n または lineptr が NULL である。 もしくは stream が有効でない)。

       ENOMEM Allocation or reallocation of the line buffer failed.

属性

       この節で使用されている用語の説明については、 attributes(7) を参照。

       ┌──────────────────────┬───────────────┬─────────┐
       │インターフェース属性      │
       ├──────────────────────┼───────────────┼─────────┤
       │getline(), getdelim() │ Thread safety │ MT-Safe │
       └──────────────────────┴───────────────┴─────────┘

準拠

       getline()  と getdelim()  は、どちらも元は GNU による拡張であったが、 POSIX.1-2008  で標準
       化された。

       #define _GNU_SOURCE
       #include <stdio.h>
       #include <stdlib.h>

       int
       main(int argc, char *argv[])
       {
           FILE *stream;
           char *line = NULL;
           size_t len = 0;
           ssize_t nread;

           if (argc != 2) {
               fprintf(stderr, "Usage: %s <file>\n", argv[0]);
               exit(EXIT_FAILURE);
           }

           stream = fopen(argv[1], "r");
           if (stream == NULL) {
               perror("fopen");
               exit(EXIT_FAILURE);
           }

           while ((nread = getline(&line, &len, stream)) != -1) {
               printf("Retrieved line of length %zd:\n", nread);
               fwrite(line, nread, 1, stdout);
           }

           free(line);
           fclose(stream);
           exit(EXIT_SUCCESS);
       }

関連項目

       read(2), fgets(3), fopen(3), fread(3), scanf(3)

この文書について

       この man ページは Linux man-pages プロジェクトのリリース 5.10 の一部である。プロジェクトの
       説明とバグ報告に関する情報は https://www.kernel.org/doc/man-pages/ に書かれている。