Manpages

名 前

wcsnrtombs − ワ イ ド 文 字 文 字 列 を マ ル チ バ イ ト 文 字 列 に 変 換 す る

書 式

#include <wchar.h>

size_t wcsnrtombs(char *dest, const wchar_t **src, size_t nwc,
size_t
len, mbstate_t *ps);

glibc 向 け の 機 能 検 査 マ ク ロ の 要 件 (feature_test_macros(7) 参 照 ):

wcsnrtombs():

glibc 2.10 以 降 :

_XOPEN_SOURCE >= 700 || _POSIX_C_SOURCE >= 200809L

glibc 2.10 よ り 前 :

_GNU_SOURCE

説 明

wcsnrtombs() 関 数 は 、 wcsrtombs() 関 数 に 似 て い る 。 た だ し 、 変 換 さ れ る ワ イ ド 文 字 の 数 が (*src か ら 数 え て ) nwc 文 字 に 制 限 さ れ て い る 点 が 異 な る 。

dest が NULL で な け れ ば 、 wcsnrtombs() 関 数 は ワ イ ド 文 字 文 字 列 の 最 大 nwc 個 ま で の ワ イ ド 文 字 を dest か ら 始 ま る マ ル チ バ イ ト 文 字 列 に 変 換 す る 。 dest に は 最 大 len バ イ ト ま で 書 き 込 ま れ る 。 シ フ ト 状 態 *ps は 更 新 さ れ る 。 実 際 の 効 果 と し て は 、 こ の 変 換 は 以 下 の 動 作 と 同 じ に な る : wcrtomb(dest, *src, ps) を 呼 び 、 成 功 が 返 っ た ら dest を 書 き 込 ん だ バ イ ト 数 だ け 増 や し 、 *src を 1 増 や す 。 そ し て 、 wcrtomb が 成 功 を 返 す 限 り こ れ を 繰 り 返 す 。 変 換 が 止 ま る 理 由 は 3 つ 考 え ら れ る :

1.

(現 在 の ロ ケ ー ル に 基 づ い て )マ ル チ バ イ ト 列 で 表 現 で き な い ワ イ ド 文 字 に 出 会 っ た 場 合 。 こ の 場 合 は 、 *src は 不 正 な ワ イ ド 文 字 を 指 し た 状 態 に な り 、 (size_t) −1 が 返 さ れ 、 errnoEILSEQ が 設 定 さ れ る 。

2.

ヌ ル ワ イ ド 文 字 (L'\0') に 出 会 わ な い で nwc 個 の ワ イ ド 文 字 を 変 換 し た 場 合 か 、 長 さ の 制 限 に よ っ て 変 換 が 止 め ら れ た 場 合 。 こ の 場 合 に は 、 *src は 次 に 変 換 さ れ る べ き ワ イ ド 文 字 を 指 し た 状 態 に な り 、 dest に 書 き 込 ま れ た バ イ ト 数 が 返 さ れ る 。

3.

ワ イ ド 文 字 列 が 終 端 の L'\0' (こ れ に は *ps を 初 期 状 態 に 戻 す と い う 副 作 用 が あ る ) も 含 め て 全 て 変 換 さ れ た 場 合 。 こ の 場 合 に は *src に NULL が 設 定 さ れ 、 dest に 書 き 込 ま れ た バ イ ト 数 が 返 さ れ る (終 端 の ヌ ル バ イ ト ('\0') は 数 え な い )。

dest が NULL な ら ば len は 無 視 さ れ て 前 述 の よ う に 変 換 が 行 わ れ る が 、 変 換 さ れ た バ イ ト デ ー タ は メ モ リ ー に 書 き 出 さ れ な い 点 と 、 出 力 先 の 長 さ の 制 限 が な い 点 が 異 な る 。 上 記 の い ず れ の 場 合 も 、 ps が NULL な ら ば 、 wcsnrtombs() 関 数 だ け が 知 っ て い る 静 的 な 匿 名 の 状 態 が シ フ ト 状 態 の 代 わ り に 用 い ら れ る 。 プ ロ グ ラ マ は 少 な く と も len バ イ ト の 領 域 を dest に 確 保 し な け れ ば な ら な い 。

返 り 値

wcsrtombs() は 、 変 換 し て 得 ら れ た マ ル チ バ イ ト 列 の バ イ ト 数 を 返 す 。 こ れ に は 終 端 の null バ イ ト は 含 ま れ な い 。 変 換 で き な い ワ イ ド 文 字 に 出 会 っ た 場 合 に は (size_t) −1 が 返 さ れ 、 errnoEILSEQ が 設 定 さ れ る 。

準 拠

POSIX.1−2008.

注 意

wcsnrtombs() の 動 作 は 現 在 の ロ ケ ー ル の LC_CTYPE カ テ ゴ リ ー に 依 存 す る 。

ps に NULL を 渡 し た 際 の 動 作 は マ ル チ ス レ ッ ド セ ー フ で な い 。

関 連 項 目

iconv(3), mbsinit(3), wcsrtombs(3)

こ の 文 書 に つ い て

こ の man ペ ー ジ は Linux man−pages プ ロ ジ ェ ク ト の リ リ ー ス 3.79 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は http://www.kernel.org/doc/man−pages/ に 書 か れ て い る 。