.\" Copyright (c) Bruno Haible .\" .\" This is free documentation; you can redistribute it and/or .\" modify it under the terms of the GNU General Public License as .\" published by the Free Software Foundation; either version 2 of .\" the License, or (at your option) any later version. .\" .\" References consulted: .\" GNU glibc-2 source code and manual .\" Dinkumware C library reference http://www.dinkumware.com/ .\" OpenGroup's Single UNIX specification http://www.UNIX-systems.org/online.html .\" .\" About this Japanese page, please contact to JM Project .\" Translated Fri Oct 22 01:12:12 JST 1999 .\" by FUJIWARA Teruyoshi .\" .TH WCSNRTOMBS 3 2010-09-15 "GNU" "Linux Programmer's Manual" .SH 名前 wcsnrtombs \- ワイド文字文字列をマルチバイト文字列に変換する .SH 書式 .nf .B #include .sp .BI "size_t wcsnrtombs(char *" dest ", const wchar_t **" src ", size_t " nwc , .BI " size_t " len ", mbstate_t *" ps ); .fi .sp .in -4n glibc 向けの機能検査マクロの要件 .RB ( feature_test_macros (7) 参照): .in .sp .BR wcsnrtombs (): .PD 0 .ad l .RS 4 .TP 4 glibc 2.10 以降: _XOPEN_SOURCE\ >=\ 700 || _POSIX_C_SOURCE\ >=\ 200809L .TP glibc 2.10 より前: _GNU_SOURCE .RE .ad .PD .SH 説明 .BR wcsnrtombs () 関数は、 .BR wcsrtombs () 関数に似ている。ただし、 変換されるワイド文字の数が(\fI*src\fP から数えて) \fInwc\fP 文字に制限 されている点が異なる。 .PP \fIdest\fP が NULL ポインタでなければ、 .BR wcsnrtombs () 関数は ワイド文字文字列の最大 \fInwc\fP 個までのワイド文字を \fIdest\fP から 始まるマルチバイト文字列に変換する。\fIdest\fP には最大 \fIlen\fP バイ トまで書き込まれる。シフト状態 \fI*ps\fP は更新される。実際の効果とし ては、この変換は以下の動作と同じになる: .IR "wcrtomb(dest, *src, ps)" を呼び、成功が返ったら \fIdest\fP を書き込んだバイト数だけ増やし、\fI*src\fP を 1 増やす。 そして、wcrtomb が成功を返す限りこれを繰り返す。 変換が止まる理由は 3 つ考えられる: .PP 1. (現在のロケールに基づいて)マルチバイト列で表現できないワイド文字に 出会った場合。この場合は、\fI*src\fP は不正なワイド文字を指した状態になり、 .I (size_t)\ \-1 が返され、\fIerrno\fP に \fBEILSEQ\fP が設定される。 .PP 2. L\(aq\\0\(aq に出会わないで \fInwc\fP 個のワイド文字を変換した場合か、長 さの制限によって変換が止められた場合。この場合には、\fI*src\fP は次に 変換されるべきワイド文字を指した状態になり、\fIdest\fP に書き込まれた バイト数が返される。 .PP 3. ワイド文字列が終端の L\(aq\\0\(aq (これには \fI*ps\fP を初期状態に戻すと いう副作用がある)も含めて全て変換された場合。この場合には \fI*src\fP に NULL が設定され、\fIdest\fP に書き込まれたバイト数が返される (終端の \(aq\\0\(aq は数えない)。 .PP \fIdest\fP が NULL ならば \fIlen\fP は無視されて前述のように変換が行わ れるが、変換されたバイトデータはメモリに書き出されない点と、出力先の長 さの制限がない点が異なる。 .PP 上記のいずれの場合も、\fIps\fP が NULL ポインタならば、wcsnrtombs 関数 だけが知っている静的な匿名の状態がシフト状態の代わりに用いられる。 .PP プログラマは少なくとも \fIlen\fP バイトの領域を \fIdest\fP に確保しな ければならない。 .SH 返り値 .BR wcsnrtombs () 関数は、変換して得られたマルチバイト列のバイト数を返 す。これには終端の null バイトは含まない。 変換できないワイド文字に出会った場合には .I (size_t)\ \-1 が返され、 \fIerrno\fP に \fBEILSEQ\fP が設定される。 .SH 準拠 この関数は GNU 拡張である。 .SH 注意 .BR wcsnrtombs () の動作は現在のロケールの .B LC_CTYPE カテゴリに依存する。 .PP \fIps\fP に NULL を渡した際の動作はマルチスレッドセーフでない。 .SH 関連項目 .BR iconv (3), .BR wcsrtombs (3)