標準/拡張機能 | C/C++ | 依存項目 |
---|---|---|
XPG4 |
両方 |
#include <wchar.h>
int fputws(const wchar_t * __restrict__wcs, FILE * __restrict__stream);
#define _OPEN_SYS_UNLOCKED_EXT 1
#include <wchar.h>
int fputws_unlocked(const wchar_t * __restrict__wcs, FILE * __restrict__stream);
wcs が指すワイド文字ストリングをマルチバイト文字ストリングに変換し、stream が指すストリームにマルチバイト文字ストリングとして書き込みます。終了 NULL バイトは書かれません。
このワイド文字関数の動作は、現行ロケールの LC_CTYPE カテゴリーの影響を受けます。 非ワイド文字関数を fputws() と共に使用すると、未定義の動作が 生じる結果となります。
fputws() には、書き込みの直後に読み取り、または読み取りの直後に 書き込みを行うための書き込み操作と同じ制約事項があります。書き込みと後続の読み取りの間には、介入フラッシュまたは位置変更が 必要です。読み取りと後続の書き込みの間でも、EOF に達していない限り、介入フラッシュまたは位置変更が必要です。
fputws_unlocked() は、スレッド・セーフでないことを除いて、機能的に fputws() と 等価です。この関数をマルチスレッドのアプリケーション内で安全に使用できるのは、 flockfile() 関数または ftrylockfile() 関数のどちらかへの呼び出しが成功した後のように、 呼び出しスレッドが (FILE*) オブジェクトを所有している間に、この関数を呼び出す場合だけです。
正常に実行された場合、fputws() は負でない値を戻します。
ストリーム・エラーが発生した場合は、fputws() は -1 を戻し、そのストリームのエラー標識が設定されます。
エンコード・エラーが発生した場合は、fputws() は -1 を戻し、EILSEQ マクロの値が errno に保管されます。エンコード・エラーは、ワイド文字をマルチバイト文字へ変換すると きに起きるものです。
⁄* CELEBF37 *⁄
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <wchar.h>
int main(void)
{
FILE *stream;
wchar_t *wcs = L"This test string should not return -1";
int rc;
if ((stream = fopen("myfile.dat", "w")) == NULL) {
printf("Unable to open file.¥n");
exit(1);
}
errno = 0;
rc = fputws(wcs, stream);
if (rc == EOF) {
printf("Unable to complete fputws() function.¥n");
if (errno == EILSEQ)
printf("An invalid wide character was encountered.¥n");
exit(1);
}
fclose(stream);
}