EN JA
GETLINE(3)
GETLINE(3) FreeBSD Library Functions Manual GETLINE(3)

名称

getdelim, getlineストリームから行を取得する

ライブラリ

Standard C Library (libc, -lc)

書式

#define _WITH_GETLINE

#include < stdio.h>

ssize_t
getdelim( char ** restrict linep, size_t * restrict linecapp, int delimiter, FILE * restrict stream);

ssize_t
getline( char ** restrict linep, size_t * restrict linecapp, FILE * restrict stream);

解説

getdelim() 関数は、文字 delimiter によって区切られた stream から 1 行を読み込みます。 getline() 関数は、デリミタを改行文字とした getdelim() と同等です。デリミタ文字は、ファイルの終りに到達していないなら、行の一部に含まれています。

呼び出し側は、 *linep の行と *linecapp のバッファの容量のための malloc されたバッファへのポイタを提供します。これらの関数は、まるで realloc() によって行われるように、必要に応じてバッファを拡張します。 linepNULL ポインタを指すなら、新しいバッファが割り付けられます。どちらの場合にも、それに応じて、 *linep*linecapp は、更新されます。

戻り値

getdelim() と getline() 関数は、終端の ヌル 文字を除いて、バッファに格納された文字数を返します。エラーが起こるか、またはファイルの終りに到達するなら、値-1 が返されます。

使用例

次のコードの断片は、ファイルから複数の行を読み込み、標準出力にそれらを書き込みます。 fwrite() 関数は、埋め込まれた ヌル 文字を含んだ行の場合に使用されます。

char *line = NULL; 
size_t linecap = 0; 
ssize_t linelen; 
while ((linelen = getline(&line, &linecap, fp)) > 0) 
 fwrite(line, linelen, 1, stdout);

互換性

getline() 関数が IEEE Std 1003.1 (“POSIX.1”) で導入される前に、多くのアプリケーションの作者は、 getline という名前を使用していたので、プロトタイプは、互換性の問題を避けるためにデフォルトで提供されません。ここに説明された getline() 関数を使用したいアプリケーションは、マクロ _POSIX_C_SOURCE を値 200809 以上と定義することによって、厳格な IEEE Std 1003.1-2008 (“POSIX.1”) 環境変数を要求するか、または < stdio.h> をインクルードする前にマクロ _WITH_GETLINE を定義するべきです。 GNU libc との互換性のために、 < stdio.h> をインクルードする前に _BSD_SOURCE または _GNU_SOURCE のいずれかを定義しても、 getline() は、利用可能となります。

エラー

これらの関数は、次の場合に失敗するかもしれません:
[ EINVAL]
linep または linecapp のいずれかが NULL です。
[ EOVERFLOW]
デリミタが、最初の SSIZE_MAX 文字で見つけられませんでした。

また、これらの関数は、 fgets() と malloc() に明記されたエラーのいずれかのために失敗するかもしれません。

関連項目

fgetln(3), fgets(3), malloc(3)

規格

getdelim() と getline() は、 IEEE Std 1003.1-2008 (“POSIX.1”) に適合しています。

歴史

これらのルーチンは、 FreeBSD 8.0 ではじめて登場しました。

バグ

getdelim() または getline() ワイド文字バージョンは、ありません。
November 30, 2012 FreeBSD