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() によって行われるように、必要に応じてバッファを拡張します。 linep が NULL ポインタを指すなら、新しいバッファが割り付けられます。どちらの場合にも、それに応じて、 *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() に明記されたエラーのいずれかのために失敗するかもしれません。
規格
getdelim() と getline() は、 IEEE Std 1003.1-2008 (“POSIX.1”) に適合しています。歴史
これらのルーチンは、 FreeBSD 8.0 ではじめて登場しました。バグ
getdelim() または getline() ワイド文字バージョンは、ありません。November 30, 2012 | FreeBSD |