getline

Autres langues

Langue: ja

Version: 2006-05-17 (mandriva - 01/05/08)

Section: 3 (Bibliothèques de fonctions)

名前

getline, getdelim - 区切り文字までの文字列入力を読み込む

書式

 #define _GNU_SOURCE
 #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);
 

説明

getline() は stream から 1 行全てを読み込み、テキストが含まれているバッファのアドレスを *lineptr に格納する。 バッファはヌル文字 (\0) で終端される。 改行文字が見つかった場合は、改行文字もバッファに格納される。

*lineptr が NULL の場合、 getline() は行の内容を格納するためのバッファを確保する。 このバッファはユーザーのプログラムで解放すべきである。 別の方法として、 getline() を呼び出す際に、 *lineptrmalloc(3) で確保した大きさ *n バイトのバッファへのポインタを入れて渡すこともできる。 読み込んだ行を保持するのに十分なバッファがない場合、 getline() は realloc(3) を使ってバッファのサイズを変更し、必要に応じて *lineptr*n を更新する。 どちらの場合でも、呼び出しに成功したときには、 *lineptr*n をバッファのアドレスと割り当てたサイズを反映した値に更新する。

getdelim() は getline() と同じように動作するが、改行文字以外の区切り文字を引き数 delim に指定することができる。 getline() と同様に、ファイル終端に達するまでに入力行に区切り文字が見付からない場合は、 区切り文字をバッファに追加しない。

返り値

成功した場合、 getline() と getdelim() は読み込んだ文字数を返す。 文字数には区切り文字を含むが、終端に使う NULL バイトは含まない。 この値によって、読み込んだ行に含まれる NULL バイトを操作することができる。

どちらの関数も、行の読み込みに失敗した場合には -1 を返す (ファイルの終端に達した場合にも -1 を返す)。

エラー

EINVAL
パラメータが不正である (n または lineptr が NULL である。 もしくは stream が有効でない)。

準拠

getline() と getdelim() は、ともに GNU による拡張である。 これらの関数は libc 4.6.27 以降で使用可能である。

 #define _GNU_SOURCE
 #include <stdio.h>
 #include <stdlib.h>
 
 int
 main(void)
 {
     FILE * fp;
     char * line = NULL;
     size_t len = 0;
     ssize_t read;
     fp = fopen("/etc/motd", "r");
     if (fp == NULL)
         exit(EXIT_FAILURE);
     while ((read = getline(&line, &len, fp)) != -1) {
         printf("Retrieved line of length %zu :\n", read);
         printf("%s", line);
     }
     if (line)
         free(line);
     return EXIT_SUCCESS;
 }
 

関連項目

read(2), fgets(3), fopen(3), fread(3), gets(3), scanf(3), feature_test_macros(7)