tail head cat sleep
QR code linking to this page

manページ  — RUNE

名称

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

内容

ライブラリ

Standard C Library (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 が選ばれました。

歴史

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

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

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


RUNE (3) December 11, 1993

tail head cat sleep
QR code linking to this page


このマニュアルページサービスについてのご意見は Ben Bullock にお知らせください。 Privacy policy.

Do you laugh when the waiter drops a tray full of dishes? Unix weenies do. They're the first ones to laugh at hapless users, trying to figure out an error message that doesn't have anything to do with what they just typed.
— The Unix Haters' handbook