RUNE(3)

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

ライブラリ
libc

書式
<rune.h> <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)

<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 が戻され、 *result は string を指します。 string の最初でエンコードのエラーが発生した場合は _INVALID_RUNE が戻され、 *result は string の第 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 マルチバイトとワイドキャラクタのサポート関数は、 ルーン関数を使用して作成されています。