getline - ライブラリコールの説明 - Linux コマンド集 一覧表
- 名前
- 書式
- 説明
- 返り値
- エラー
- 例
- 準拠
- 関連項目
名前
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()を呼び出す際に、
*lineptrに
malloc()で確保した大きさ
"*n"バイトのバッファへのポインタを入れて渡すこともできる。
読み込んだ行を保持するのに十分なバッファがない場合、
getline()は
realloc()を使ってバッファのサイズを変更し、必要に応じて
"*lineptr"と
"*n"を更新する。
どちらの場合でも、呼び出しに成功したときには、
"*lineptr"と
"*n"をバッファのアドレスと割り当てたサイズを反映した値に更新する。
getdelim()は
getline()と同じように動作するが、改行文字以外の区切り文字を引き数
delimに指定することができる。
getline()と同様に、ファイル終端に達するまでに入力行に区切り文字が見付からない場合は、
区切り文字をバッファに追加しない。
返り値
成功した場合、
getline()と
getdelim()は読み込んだ文字数を返す。
文字数には区切り文字を含むが、終端に使う NULL バイトは含まない。
この値によって、読み込んだ行に含まれる NULL バイトを操作することができる。
どちらの関数も、行の読み込みに失敗した場合には -1 を返す
(ファイルの終端に達した場合にも -1 を返す)。
エラー
-
EINVAL
-
パラメータが不正である
(nまたは
lineptrが NULL である。
もしくは
streamが有効でない)。
例
#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;
}
準拠
getline
()
と
getdelim
()
は、ともに GNU による拡張である。
これらの関数は libc 4.6.27 以降で使用可能である。
関連項目
- Linux Tips 関連記事
- Linux Tips(目次)
- Linux ディストリビューション一覧
- rpm のファイル名にあるi386とかi686とは
- 自分のマシンの情報を調べる
- cron の設定
- ssh の root ログインを禁止する
- ssh を、ユーザ、IPでアクセス制限
- 鍵交換方式によるssh接続
- 鍵交換方式によるssh接続( windowsから )
- 複数ファイル内の文字列を置換して上書き保存する
- あるグループをイニシャルグループとするユーザー一覧出力
- 複数ファイルのファイル名を一括変換する
- 連番ファイルをコマンド一発で作成する
- 中身がランダムなファイルを任意のサイズで作成する
- Linux ユーザーアカウントをロック・アンロックする