_setmode
設定檔案轉譯模式。
語法
int _setmode (
int fd,
int mode
);
參數
fd
檔案描述項。
mode
新的轉譯模式。
傳回值
若成功,會傳回之前的轉譯模式。
如果傳遞無效的參數至此函式,則會叫用無效的參數處理程式,如參數驗證中所述。 如果允許繼續執行,此函式會傳回 -1,並將 設定 errno
為 EBADF
,表示無效的檔案描述元或 EINVAL
,表示無效 mode
的自變數。
如需這些傳回碼和其他傳回碼的詳細資訊,請參閱errno
、 _sys_errlist
_doserrno
和 _sys_nerr
。
備註
_setmode
函式會設定 mode
為 fd
所指定之檔案的轉譯模式。 以_O_TEXT
mode
設定 ANSI 文字 (也就是翻譯) 模式傳遞。 歸位字元換行字元 (CR-LF) 組合會在輸入時轉譯成單一換行字元。 換行字元會在輸出中轉譯為 CR-LF 組合。 傳遞 _O_BINARY
可設定二進位 (未轉譯) 模式,此模式會抑止這些轉譯。
您也可以傳遞 _O_U16TEXT
、 _O_U8TEXT
或 _O_WTEXT
來啟用 Unicode 模式,如本檔稍後的第二個範例所示。
警告
Unicode 模式適用於寬列印函式(例如 wprintf
),不支援窄列印函式。 在 Unicode 模式數據流上使用窄列印函式會觸發判斷提示。
一般而言會使用 _setmode
修改 stdin
和 stdout
的預設轉譯模式,但您可以將其用於任何檔案。 若您將 _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