1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
|
.\" Copyright (c) Bruno Haible <haible@clisp.cons.org>
.\"
.\" %%%LICENSE_START(GPLv2+_DOC_ONEPARA)
.\" 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.
.\" %%%LICENSE_END
.\"
.\" 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
.\"
.\"*******************************************************************
.\"
.\" This file was generated with po4a. Translate the source file.
.\"
.\"*******************************************************************
.\"
.\" Translated Fri Oct 22 01:12:12 JST 1999
.\" by FUJIWARA Teruyoshi <fujiwara@linux.or.jp>
.\"
.TH WCSNRTOMBS 3 2014\-03\-18 GNU "Linux Programmer's Manual"
.SH 名前
wcsnrtombs \- ワイド文字文字列をマルチバイト文字列に変換する
.SH 書式
.nf
\fB#include <wchar.h>\fP
.sp
\fBsize_t wcsnrtombs(char *\fP\fIdest\fP\fB, const wchar_t **\fP\fIsrc\fP\fB, size_t \fP\fInwc\fP\fB,\fP
\fB size_t \fP\fIlen\fP\fB, mbstate_t *\fP\fIps\fP\fB);\fP
.fi
.sp
.in -4n
glibc 向けの機能検査マクロの要件 (\fBfeature_test_macros\fP(7) 参照):
.in
.sp
\fBwcsnrtombs\fP():
.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 説明
\fBwcsnrtombs\fP() 関数は、 \fBwcsrtombs\fP() 関数に似ている。ただし、 変換されるワイド文字の数が(\fI*src\fP
から数えて) \fInwc\fP 文字に制限 されている点が異なる。
.PP
\fIdest\fP が NULL でなければ、 \fBwcsnrtombs\fP() 関数は ワイド文字文字列の最大 \fInwc\fP 個までのワイド文字を
\fIdest\fP から 始まるマルチバイト文字列に変換する。\fIdest\fP には最大 \fIlen\fP バイ トまで書き込まれる。シフト状態 \fI*ps\fP
は更新される。実際の効果とし ては、この変換は以下の動作と同じになる: \fIwcrtomb(dest, *src, ps)\fP を呼び、成功が返ったら
\fIdest\fP を書き込んだバイト数だけ増やし、\fI*src\fP を 1 増やす。 そして、wcrtomb が成功を返す限りこれを繰り返す。
変換が止まる理由は 3 つ考えられる:
.IP 1. 3
(現在のロケールに基づいて)マルチバイト列で表現できないワイド文字に 出会った場合。この場合は、\fI*src\fP は不正なワイド文字を指した状態になり、
\fI(size_t)\ \-1\fP が返され、\fIerrno\fP に \fBEILSEQ\fP が設定される。
.IP 2.
ヌルワイド文字 (L\(aq\e0\(aq) に出会わないで \fInwc\fP 個のワイド文字を 変換した場合か、長さの制限によって変換が止められた場合。
この場合には、\fI*src\fP は次に変換されるべきワイド文字を指した状態になり、 \fIdest\fP に書き込まれたバイト数が返される。
.IP 3.
ワイド文字列が終端の L\(aq\e0\(aq (これには \fI*ps\fP を初期状態に戻すという副作用がある)
も含めて全て変換された場合。この場合には \fI*src\fP に NULL が設定され、
\fIdest\fP に書き込まれたバイト数が返される
(終端のヌルバイト (\(aq\e0\(aq) は数えない)。
.PP
\fIdest\fP が NULL ならば \fIlen\fP は無視されて前述のように変換が行わ
れるが、変換されたバイトデータはメモリーに書き出されない点と、出力先の長 さの制限がない点が異なる。
.PP
上記のいずれの場合も、\fIps\fP が NULL ならば、\fBwcsnrtombs\fP() 関数
だけが知っている静的な匿名の状態がシフト状態の代わりに用いられる。
.PP
プログラマは少なくとも \fIlen\fP バイトの領域を \fIdest\fP に確保しな ければならない。
.SH 返り値
\fBwcsrtombs\fP() は、変換して得られたマルチバイト列のバイト数を返す。 これには終端の null バイトは含まれない。
変換できないワイド文字に出会った場合には \fI(size_t)\ \-1\fP が返され、 \fIerrno\fP に \fBEILSEQ\fP が設定される。
.SH 準拠
POSIX.1\-2008.
.SH 注意
\fBwcsnrtombs\fP() の動作は現在のロケールの \fBLC_CTYPE\fP カテゴリーに依存する。
.PP
\fIps\fP に NULL を渡した際の動作はマルチスレッドセーフでない。
.SH 関連項目
\fBiconv\fP(3), \fBmbsinit\fP(3), \fBwcsrtombs\fP(3)
.SH この文書について
この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.79 の一部
である。プロジェクトの説明とバグ報告に関する情報は
http://www.kernel.org/doc/man\-pages/ に書かれている。
|