_setmode
設定檔案轉譯模式。
int _setmode ( int fd, int mode );
參數
fd
檔案描述項。mode
新的轉譯模式。
傳回值
若成功,會傳回之前的轉譯模式。
若傳遞了無效的參數到此函式,則會叫用無效參數處理常式,如 參數驗證 中所述。 若允許繼續執行,此函式會傳回 –1,並將 errno 設定為 EBADF:表示無效的檔案描述項;或是設定為 EINVAL:表示無效的 mode 引數。
如需有關這些傳回碼和其他傳回碼的詳細資訊,請參閱 _doserrno, errno, _sys_errlist, and _sys_nerr。
備註
_setmode 函式會設定 mode 為 fd 所指定之檔案的轉譯模式。 若 mode 設定文字 (亦即:已轉譯) 模式,則傳遞 _O_TEXT。 歸位字元–換行字元 (CR-LF) 的組合會在輸入中轉譯為單行換行字元。 換行字元會在輸出中轉譯為 CR-LF 組合。 傳遞 _O_BINARY 可設定二進位 (未轉譯) 模式,此模式會抑止這些轉譯。
您也可以傳遞 _O_U16TEXT、_O_U8TEXT 或 _O_WTEXT 以啟用 Unicode 模式,本文件稍後的第二個範例即會進行示範。 一般而言會使用 _setmode 修改 stdin 和 stdout 的預設轉譯模式,但您可以將其用於任何檔案。 若您將 _setmode 套用於資料流的檔案描述項,請先呼叫 _setmode,再於資料流上執行任意輸入或輸出作業。
警告
若您將資料寫入檔案資料流,請先使用 fflush 明確地清除代碼,再使用 _setmode 變更模式。若您沒有清除代碼,可能會發生未預期的行為。若您沒有將資料寫入資料流,則不用清除代碼。
需求
常式 |
必要的標頭 |
選擇性標頭 |
---|---|---|
_setmode |
<io.h> |
<fcntl.h> |
如需相容性的詳細資訊,請參閱相容性。
範例
// 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" );
}
// 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;
}