Man page - getdelim(3)

Packages contains this manual

Available languages:

en fr pl ja ru ro

Manual

GETLINE

名 前
書 式
説 明
返 り 値
エ ラ ー
属 性
準 拠

関 連 項 目
こ の 文 書 に つ い て

名 前

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) を 参 照 。

Image grohtml-15807-1.png

準 拠

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/ に 書 か れ て い る 。