Manpages

名 前

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 || _XOPEN_SOURCE >= 700

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 が 有 効 で な い )。

準 拠

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

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

int
main(void)
{
FILE *stream;
char *line = NULL;
size_t len = 0;
ssize_t read;

stream = fopen("/etc/motd", "r");
if (stream == NULL)
exit(EXIT_FAILURE);

while ((read = getline(&line, &len, stream)) != −1) {
printf("Retrieved line of length %zu :\n", read);
printf("%s", line); }

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

関 連 項 目

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

こ の 文 書 に つ い て

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