ファイルの変換モードを設定します。Sets the file translation mode.


int _setmode (
   int fd,
   int mode


ファイル記述子。File descriptor.

新しい変換モード。New translation mode.

戻り値Return Value

成功した場合、前の変換モードを返します。If successful, returns the previous translation mode.

この関数に無効なパラメーターが渡されると、「パラメーターの検証」で説明されているように無効なパラメーター ハンドラーが呼び出されます。If invalid parameters are passed to this function, the invalid-parameter handler is invoked, as described in Parameter Validation. 実行の継続が許可された場合、この関数は-1 を返し、 errnoを、無効なファイル記述子を示すEBADF、または無効なモード引数を示すEINVALに設定します。If execution is allowed to continue, this function returns -1 and sets errno to either EBADF, which indicates an invalid file descriptor, or EINVAL, which indicates an invalid mode argument.

リターン コードの詳細については、「_doserrno、errno、_sys_errlist、および _sys_nerr」を参照してください。For more information about these and other return codes, see _doserrno, errno, _sys_errlist, and _sys_nerr.


_Setmode関数は、 fdによって指定されたファイルの変換モードをモードに設定します。The _setmode function sets to mode the translation mode of the file given by fd. モードとして _O_TEXTを渡すと、テキスト (変換) モードが設定されます。Passing _O_TEXT as mode sets text (that is, translated) mode. キャリッジリターンラインフィード (CR-LF) の組み合わせは、入力時に1つのラインフィード文字に変換されます。Carriage return-line feed (CR-LF) combinations are translated into a single line feed character on input. ライン フィード文字は、出力時に CR-LF の組み合わせに変換されます。Line feed characters are translated into CR-LF combinations on output. _O_BINARYを渡すと、変換が抑制されるバイナリ (無変換) モードが設定されます。Passing _O_BINARY sets binary (untranslated) mode, in which these translations are suppressed.

このドキュメントで後述する2番目の例に示すように、 _O_U16TEXT_O_U8TEXT、または _O_WTEXT を渡して Unicode モードを有効にすることもできます。You can also pass _O_U16TEXT, _O_U8TEXT, or _O_WTEXT to enable Unicode mode, as demonstrated in the second example later in this document.


Unicode モードは、ワイド印刷関数 (など) 用で wprintf あり、ナロー印刷関数ではサポートされていません。Unicode mode is for wide print functions (for example, wprintf) and is not supported for narrow print functions. Unicode モードストリームでナロー print 関数を使用すると、アサートがトリガーされます。Use of a narrow print function on a Unicode mode stream triggers an assert.

_setmode は通常、 stdinstdoutの既定の変換モードを変更するために使用されますが、任意のファイルで使用できます。_setmode is typically used to modify the default translation mode of stdin and stdout, but you can use it on any file. ストリームのファイル記述子に _setmode を適用する場合は、ストリームに対して入力または出力操作を実行する前に _setmode を呼び出します。If you apply _setmode to the file descriptor for a stream, call _setmode before you perform any input or output operations on the stream.


ファイルストリームにデータを書き込む場合は、 _setmodeを使用してモードを変更する前に、 fflushを使用して明示的にコードをフラッシュします。If you write data to a file stream, explicitly flush the code by using fflush before you use _setmode to change the mode. コードをフラッシュしないと、予期しない動作が発生することがあります。If you do not flush the code, you might get unexpected behavior. ストリームにデータを書き込んでいない場合は、コードをフラッシュする必要はありません。If you have not written data to the stream, you do not have to flush the code.

既定では、この関数のグローバル状態はアプリケーションにスコープが設定されています。By default, this function's global state is scoped to the application. これを変更するには、「 CRT でのグローバル状態」を参照してください。To change this, see Global state in the CRT.


ルーチンによって返される値Routine 必須ヘッダーRequired header 省略可能なヘッダーOptional Headers
_setmode_setmode <io.h> <fcntl.h>

互換性について詳しくは、「 Compatibility」をご覧ください。For more compatibility information, see Compatibility.

例: _setmode を使用した stdin の変更Example: Use _setmode to change 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" );
      printf( "'stdin' successfully changed to binary mode\n" );
'stdin' successfully changed to binary mode

例: _setmode を使用して stdout を変更するExample: Use _setmode to change 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;

関連項目See also

ファイルの処理File Handling
_creat、_wcreat_creat, _wcreat
fopen、_wfopenfopen, _wfopen
_open、_wopen_open, _wopen