名称
orientation ― ストリームの指向性
説明
ストリームの指向性は、入出力ストリームとして処理される FILE オブジェクトの属性の 1 つです。
これは、文字がアプリケーション内でワイドキャラクタとして処理され、 ファイル内にマルチバイトの文字コードセットとして保存されること、さらに、
すべてのワイドキャラクタの入出力関数が 2 つのマルチバイト文字間の境界に位置するストリームによって実行を開始することを入出力モデルが想定している場合に有効です。
ストリームがファイルに関連付けられた後、ただし、操作がストリーム上で実行される前は、ストリームは無指向の状態です。
ワイドキャラクタの入力関数または出力関数が無指向のストリームに適用されると、ストリームは暗黙のうちにワイド指向になります。
同様に、バイトの入力関数または出力関数が無指向のストリームに適用されると、ストリームは暗黙のうちにバイト指向になります。
ストリームが無指向の場合は、 fwide() 関数のみがストリームの指向性を明示的に変更できます。
ストリームが popen() 関数によってパイプと関連付けられた直後に、ストリームはバイト指向になります。
ストリームがバイト指向またはワイド指向になった後は、ストリームの指向性が固定します。
ストリームがクローズされるまで、指向性を変更することはできません。
ワイドキャラクタの入出力関数は、以下のとおりです。
fgetwc()、 fgetws()、 fputwc()、 fputws()、 fwprintf()、 fwscanf()、 getwc()、 getwchar()、 putwc()、 putwchar()、 putws()、 ungetwc()、 vfwprintf()、 wprintf()、 wscanf()
バイトの入出力関数は、以下のとおりです。
fgetc()、 fgets()、 fprintf()、 fputc()、 fputs()、 fread()、 fscanf()、 fwrite()、 getc()、 getchar()、 getc_unlocked()、 getchar_unlocked()、 gets()、 getw()、 printf()、 putc()、 putchar()、 putc_unlocked()、 putchar_unlocked()、 puts()、 putw()、 scanf()、 ungetc()、 vfprintf()、 vprintf()
例
ストリームの指向性が不明のときに、ストリームから文字を読み取る場合:
int so;
wchar_t ws[CHAR_NUM];
char s[CHAR_NUM];
so = fwide(stream, 0); /* Check the orientation */
if (so > 0) /* the stream is wide-oriented */
fgetws(ws, CHAR_NUM, stream);
else if (so < 0) / * stream is byte-oriented */
fgets(s, CHAR_NUM, stream);
else /* the stream is without orientation */
fprintf(stderr, "It is first time to access this file.");
警告
バイトの入出力関数がワイド指向のストリームに適用されたり、
ワイドキャラクタの入出力関数がバイト指向のストリームに適用されると、
動作は不定です。
著者
ストリームの指向性機能は、HP および三菱電機により開発されました。
参照
fgetws(3C), fopen(3S), fread(3S), fwide(3C), fwprintf(3C),
fwscanf(3C), getc(3S), gets(3S), getwc(3C), popen(3S), printf(3S),
putc(3S), puts(3S), putwc(3C), putws(3C), scanf(3S), ungetc(3S),
ungetwc(3C)