OPEN_MEMSTREAM(3) | FreeBSD Library Functions Manual | OPEN_MEMSTREAM(3) |
名称
open_memstream, open_wmemstream — 動的なメモリバッファストリームのオープン関数ライブラリ
Standard C Library (libc, -lc)書式
#include < stdio.h> FILE *
open_memstream( char **bufp, size_t **sizep);
#include < wchar.h>
FILE *
open_wmemstream( wchar_t **bufp, size_t **sizep);
解説
open_memstream() と open_wmemstream() 関数は、動的に割り付けられたメモリバッファによって裏打ちされた書き込み専用でシーク可能なストリームを作成します。 open_memstream() 関数は、バイト指向 (byte-oriented) のストリームを作成し、一方 open_wmemstream() 関数は、ワイド指向 (wide-oriented) のストリームを作成します。各ストリームは、現在の位置とサイズを維持します。最初に、位置とサイズは、0 に設定されます。各書き込みは、現在の位置で始まり、 open_memstream() のために成功して書き込まれたバイトの数を、または open_wmemstream() のために成功して書き込まれたワイド文字の数を進めます。書き込みがバッファの長さを越えて現在位置を移動させるなら、バッファの長さは、拡張され、ヌル文字が、バッファに追加されます。
ストリームのバッファは、常に現在の長さに含まれていないバッファの終りにヌル文字を含んでいます。
ストリームの現在の位置がシーク操作よって現在の長さを越えて移動され、書き込みが実行されるなら、書き込みが実行される前に、現在の長さと現在の位置の間の文字は、ヌル文字で満たされます。
fclose(3) または fflush(3) への呼び出しが成功した後に、 bufp によって参照されるポインタは、メモリバッファの開始を含み、 sizep によって参照される変数は、現在の位置と現在のバッファの長さのより小さなものを含みます。
fflush(3) への呼び出しが成功した後に、 bufp によって参照されるポインタと sizep によって参照される変数のみ、次の書き込み操作または fclose(3) への呼び出しまで、有効です。
いったん、ストリームがクローズされると、 bufp によって参照される割り付けられたバッファは、それがもはや必要とされないとき、 free(3) への呼び出しによって解放されるべきです。
実装に関する注
内部的に、すべての I/O ストリームは、効果的にバイト指向であるので、 open_wmemstream() によってオープンされたストリームに書き込むためにワイド指向の操作を使用することは、stdio の内部バッファのマルチバイト文字のストリームに拡張されたワイド文字の結果となります。その後、これらのマルチバイト文字は、ストリーム書き込まれるとき、元のワイド文字に変換されます。結果として、ワイド指向のストリームは、現在の位置を変更するあらゆるシーク操作でクリアされる内部のマルチバイト文字変換の状態を維持します。これは、ワイド指向の出力操作がワイド指向のストリームで使用される限り、効果がないとされています。戻り値
成功して完了すれば、 open_memstream() と open_wmemstream() は、 FILE ポインタを返します。そうでなければ、 NULL が返され、グローバル変数 errno は、エラーを示す値が設定されます。エラー
- [ EINVAL]
- bufp または sizep 引数が NULL でした。
- [ ENOMEM]
- ストリームまたはバッファのためのメモリを割り付けることができませんでした。
規格
open_memstream() と open_wmemstream() 関数は、 IEEE Std 1003.1-2008 (“POSIX.1”) に適合しています。February 27, 2013 | FreeBSD |