_setmode

設定檔案轉譯模式。

語法

int _setmode (
   int fd,
   int mode
);

參數

fd
檔案描述項。

mode
新的轉譯模式。

傳回值

若成功,會傳回之前的轉譯模式。

如果傳遞不正確參數至此函式,則會叫用不正確參數處理常式,如參數驗證 中所述 。 如果允許繼續執行,此函式會傳回 -1,並將 設定 errnoEBADF ,表示不正確檔案描述元或 EINVAL ,表示無效 mode 的引數。

如需這些傳回碼和其他傳回碼的詳細資訊,請參閱 errno_sys_errlist_doserrno_sys_nerr

備註

_setmode 函式會設定 modefd 所指定之檔案的轉譯模式。 若 _O_TEXT 設定文字 (亦即:已轉譯) 模式,則傳遞 mode。 歸位字元換行字元 (CR-LF) 組合會在輸入時轉譯成單一換行字元。 換行字元會在輸出中轉譯為 CR-LF 組合。 傳遞 _O_BINARY 可設定二進位 (未轉譯) 模式,此模式會抑止這些轉譯。

您也可以傳遞 _O_U16TEXT_O_U8TEXT_O_WTEXT 來啟用 Unicode 模式,如本檔稍後的第二個範例所示。

警告

Unicode 模式適用于寬列印函式(例如 wprintf ),不支援窄列印函式。 在 Unicode 模式資料流程上使用窄列印函式會觸發判斷提示。

一般而言會使用 _setmode 修改 stdinstdout 的預設轉譯模式,但您可以將其用於任何檔案。 若您將 _setmode 套用於資料流的檔案描述項,請先呼叫 _setmode,再於資料流上執行任意輸入或輸出作業。

警告

如果您將資料寫入檔案資料流程,請先使用 來明確排清程式碼 fflush ,再使用 _setmode 來變更模式。 若您沒有清除代碼,可能會發生未預期的行為。 若您沒有將資料寫入資料流,則不用清除代碼。

根據預設,此函式的全域狀態會限定于應用程式。 若要變更此行為,請參閱 CRT 中的全域狀態。

需求

常式 必要的標頭 選擇性標頭
_setmode <io.h> <fcntl.h>

如需相容性詳細資訊,請參閱相容性

範例:用來 _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