_setmode
ファイルの変換モードを設定します。
構文
int _setmode (
int fd,
int mode
);
パラメーター
fd
ファイル記述子。
mode
新しい変換モード。
戻り値
成功した場合、前の変換モードを返します。
この関数に無効なパラメーターが渡された場合、 パラメーター検証で説明されているように、無効なパラメーター ハンドラーが呼び出されます。 実行の継続が許可された場合、この関数は -1 を返し、errno
を EBADF
(無効なファイル記述子を示します) または EINVAL
(無効な mode
引数を示します) のどちらかに設定します。
これらのリターン コードとその他のリターン コードについては、「errno
、_doserrno
、_sys_errlist
、_sys_nerr
」を参照してください。
解説
_setmode
関数は、mode
で指定されたファイルの変換モードを fd
に設定します。 _O_TEXT
をmode
として渡すと、ANSI テキスト (つまり、翻訳済み) モードが設定されます。 復帰と改行 (CR-LF) の組み合わせは、入力時に 1 つの改行文字に変換されます。 ライン フィード文字は、出力時に CR-LF の組み合わせに変換されます。 _O_BINARY
を渡すと、バイナリ (未変換) モードが設定され、このモードではこれらの変換は抑制されます。
このドキュメントの後の方にある 2 番目の例に示されているように、_O_U16TEXT
、_O_U8TEXT
、または _O_WTEXT
を渡して Unicode モードを有効にすることもできます。
注意事項
Unicode モードはワイド出力関数 (wprintf
など) のためのものであり、ナロー出力関数ではサポートされていません。 Unicode モードのストリームでナロー出力関数を使用すると、アサートがトリガーされます。
_setmode
は、通常は stdin
および stdout
の既定の変換モードを変更するために使用しますが、任意のファイルで使用できます。 _setmode
をストリームのファイル記述子に適用する場合は、ストリームに対して入力または出力操作を実行する前に _setmode
を呼び出します。
注意事項
ファイル ストリームにデータを書き込む場合は、_setmode
を使用してモードを変更する前に、fflush
を使用してコードを明示的にフラッシュします。 コードをフラッシュしないと、予期しない動作が発生することがあります。 ストリームにデータを書き込んでいない場合は、コードをフラッシュする必要はありません。
既定では、この関数のグローバル状態の適用対象は、アプリケーションになります。 この動作を変更するには、「CRT でのグローバル状態」を参照してください。
要件
ルーチンによって返される値 | 必須ヘッダー | 省略可能なヘッダー |
---|---|---|
_setmode |
<io.h> |
<fcntl.h> |
互換性の詳細については、「 Compatibility」を参照してください。
例: _setmode
を使用して stdin を変更する
// crt_setmode.c
// This program uses _setmode to change
// stdin from text mode to binary mode.
#include <stdio.h>
#include <fcntl.h>
#include <io.h>
int main( void )
{
int result;
// Set "stdin" to have binary mode:
result = _setmode( _fileno( stdin ), _O_BINARY );
if( result == -1 )
perror( "Cannot set mode" );
else
printf( "'stdin' successfully changed to binary mode\n" );
}
'stdin' successfully changed to binary mode
例: _setmode
を使用して stdout を変更する
// crt_setmodeunicode.c
// This program uses _setmode to change
// stdout to Unicode. Cyrillic and Ideographic
// characters will appear on the console (if
// your console font supports those character sets).
#include <fcntl.h>
#include <io.h>
#include <stdio.h>
int main(void) {
_setmode(_fileno(stdout), _O_U16TEXT);
wprintf(L"\x043a\x043e\x0448\x043a\x0430 \x65e5\x672c\x56fd\n");
return 0;
}
関連項目
ファイル処理
_creat
, _wcreat
fopen
, _wfopen
_open
, _wopen
_set_fmode