Provided by: manpages-ja-dev_0.5.0.0.20221215+dfsg-1_all
名前
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() を呼び出す際に、 *lineptr に malloc(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/ に書かれている。