fwide() - ストリーム指向の設定

標準

標準/拡張機能 C/C++ 依存項目

ISO C 改訂
ISO/ANSI C++
C99
Single UNIX Specification、バージョン 3
Language Environment

両方 z/OS® V1R7

形式

#define _MSE_PROTOS 
#include <stdio.h>
#include <wchar.h>

int fwide(FILE *stream, int mode);

#define _OPEN_SYS_UNLOCKED_EXT 1
#include <wchar.h>

int fwide_unlocked(FILE *stream, int mode);

機能説明

fwide() は、stream によって指定されたストリームの指向を決定します。mode が 0 より大きい場合、関数はストリームをワイド指向にすることを試みます。 mode が 0 より小さい場合、関数はストリームをバイト指向にすることを試みます。 どちらでもなく、mode が 0 の場合、関数はストリームの指向を変更せず、代わりに関数はストリームの現在の指向を戻します。

ストリームの指向が既に決定されている場合、fwide() はその指向を変更しません。

type=record または type=blocked として開かれたストリームには、指向はありません。

VSAM データ・セットと CICS® 一時データ・キューには、指向はありません。 VSAM データ・セットまたは CICS 一時データ・キューを参照するストリームに対しては、fwide() は正常に使用できません。

エラー状態を検査するアプリケーションは、errno を 0 に設定し、fwide() を呼び出してから、errno を検査する必要があります。errno がゼロ以外であれば、エラーが発生したと想定されます。

fwide_unlocked() は、スレッド・セーフでないことを除いて、機能的に fwide() と 等価です。この関数をマルチスレッドのアプリケーション内で安全に使用できるのは、 flockfile() 関数または ftrylockfile() 関数のどちらかへの呼び出しが成功した後のように、 呼び出しスレッドが (FILE*) オブジェクトを所有している間に、この関数を呼び出す場合だけです。

C++ の特別考慮事項: fwide() と C++ 入出力ストリームの相互作用は未定義です。

使用上の注意

  1. ランタイム・ライブラリーは、ワイド指向ストリームに対するバイト指向入出力関数の使用、バイト指向ストリームに対するワイド指向入出力関数の使用など、混合した指向の使用を禁止しません。このようにした場合、アプリケーションは未定義の動作をします。 この結果、fwide() によって報告されるストリームの指向は、使用されている入出力関数と整合しない可能性があります。fwide() 自体を使用して最初に設定された、またはストリームに対する最初の入出力操作によって設定されたストリーム指向が戻されます。例えば、fwide() を使用して指向をバイト指向に設定したにもかかわらず、ストリームに対してワイド指向入出力関数のみが使用された場合、入出力関数の混合は発生していませんが、ストリームの指向はバイト指向のままになります。

戻り値

正常に実行された場合、呼び出し後にストリームがワイド指向であれば、fwide() は 0 より大きい値を戻します。 呼び出し後にストリームがバイト指向であれば 0 より小さい値を戻し、ストリームに指向がなければ 0 を戻します。

正常に実行されなかった場合、fwide() は 0 を戻し、errno を次のいずれかに設定します。

EBADF - stream によって指定されたストリームは無効。

EINVAL - stream によって指定されたストリームは type=record または type=blocked として開かれたか、ストリームが VSAM データ・セットまたは CICS 一時データ・キューを参照している。

関連情報