スポンサーリンク

RUNE(3) FreeBSD ライブラリ関数マニュアル RUNE(3)

名称

setrunelocale, setinvalidrune, sgetrune, sputrune, fgetrune, fungetrune, fputrune − C 用ルーンサポート

ライブラリ

標準 C ライブラリ (libc, −lc)

書式

#include <rune.h>
#include <errno.h>

int

setrunelocale(char *locale);

void

setinvalidrune(rune_t rune);

rune_t

sgetrune(const char *string, size_t n, char const **result);

int

sputrune(rune_t rune, char *string, size_t n, char **result);

#include <stdio.h>

long

fgetrune(FILE *stream);

int

fungetrune(rune_t rune, FILE *stream);

int

fputrune(rune_t rune, FILE *stream);

解説

setrunelocale() は、マルチバイトストリングとしてルーンを表現するためのエ ンコードのタイプ、および ⟨ctype.h⟩ で定義されたルーンのプロパティを制御し ます。 locale 引数は、ロードするロケールを指定します。ロケールが正常に ロードされると 0 が戻され、ロードで問題が生じるとエラータイプを表す errno 値が戻されます。

setinvalidrune() 関数は、グローバル値 _INVALID_RUNE の値を rune に設定し ます。

sgetrune() 関数は、長さが最大 n バイトの 1 つのマルチバイトキャラクタを string から読み込もうとします。 sgetrune() で問題が発生しなかった場合は ルーンが戻されます。 result が NULL ではない場合、 *result は、 string で 変換されなかった最初のバイトを指します。 string の最初の n バイトが完全な マルチバイトキャラクタを表さない場合は _INVALID_RUNE が戻され、 *resultstring を指します。 string の最初でエンコードのエラーが発生した場合は _INVALID_RUNE が戻され、 *resultstring の第 2 キャラクタを指します。

sputrune() 関数は、マルチバイトストリングとして rune をエンコードし、 string に保存しようとします。しかし n バイトまでしか保存されません。 result が NULL ではない場合、 *result は、新しいマルチバイトキャラクタに 続くストリングの最初のバイトを指すように設定されます。 string が NULL で ある場合、 *result は (char *)0 + x を指します。 x は、マルチバイト値の保 存に必要なバイト数です。マルチバイトキャラクタが n より長いバイトから構成 され、 result が NULL ではない場合、 *result は NULL に設定されます。どの ような場合でも、 sputrune() は、マルチバイトキャラクタとして rune を保存 するために必要なバイト数を戻します。

fgetrune() 関数は、 1 つのルーンをデコードするのに足る数のバイトを stream から読み込もうとすることを除けば、 sgetrune() と同じ動作をします。ファイ ルの終わりに達した場合は EOF を、エンコードでエラーが発生した場合は _INVALID_RUNE を、問題が発生しなかった場合はデコードされたルーンを戻しま す。

fungetrune() 関数は、次に fgetrune() を呼び出した場合に rune が戻されるよ うに、 sputrune() が与える rune のマルチバイトエンコードを stream にプッ シュします。エラーが発生した場合は EOF を戻し、エラーが発生しなかった場合 は 0 を戻します。

fputrune() 関数は、 sputrune() が与える rune のマルチバイトエンコードを stream に書き込みます。エラーが発生した場合は EOF を戻し、エラーが発生し なかった場合は 0 を戻します。

戻り値

setrunelocale() 関数は、以下の値のどれか 1 つを戻します。

       0

setrunelocale() で問題が発生しませんでした。

[EFAULT]
locale
が NULL になっています。

[ENOENT]
ロケールが見つかりません。

[EFTYPE]
見つかったファイルが正しいファイルではありません。

[EINVAL]
ロケールで示されるエンコードが未知のものです。

sgetrune() 関数は、読み込んだルーンか _INVALID_RUNE を戻します。 sputrune() 関数は、マルチバイトストリングとして rune を保存するために必要 なバイト数を戻します。

関連ファイル

       $PATH_LOCALE/locale/LC_CTYPE

/usr/share/locale/locale/LC_CTYPE
ロケール locale のバイナリ LC_CTYPE ファイル

関連項目

mbrune(3), setlocale(3), euc(4), utf2(4)

ANSI C の wchar_t 型は、 rune_t と同じです。美しさに劣る ANSI C プリミ ティブをシステムの土台としない故意の選択であることを強調するために rune_t が選ばれました。

歴史

この関数は、 4.4BSD で初めて登場しました。

setrunelocale() 関数とその他の非 ANSI ルーン関数は、 ANSI マルチバイトと ワイドキャラクタサポートのより確実な代替案としての Bell Labs Plan 9 に ヒントを得ました。

すべての ANSI マルチバイトとワイドキャラクタのサポート関数は、ルーン関数 を使用して作成されています。

FreeBSD 10.0 December 11, 1993 FreeBSD 10.0

スポンサーリンク