Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Define o modo de tradução do arquivo.
Sintaxe
int _setmode (
int fd,
int mode
);
Parâmetros
fd
Descritor de arquivo.
mode
Novo modo de conversão.
Valor retornado
Se bem-sucedido, retorna para o modo de conversão anterior.
Se parâmetros inválidos forem passados para essa função, o manipulador de parâmetro inválido será invocado, conforme descrito em Validação de parâmetro. Se a execução tiver permissão para continuar, essa função retornará -1 e definirá errno como EBADF, que indica um descritor de arquivo inválido ou EINVAL, que indica um argumento mode inválido.
Para obter mais informações sobre esses e outros códigos de retorno, confira errno, _doserrno, _sys_errlist e _sys_nerr.
Comentários
A função _setmode define para mode o modo de conversão do arquivo fornecido por fd. Passar _O_TEXT como mode define o modo de texto ANSI (ou seja, traduzido). Combinações CR-LF (retorno de carro – alimentação de linha) são convertidas em um único caractere de alimentação de linha na entrada. Os caracteres de alimentação de linha são convertidos para combinações CR-LF na saída. Passar _O_BINARY define o modo binário (não traduzido), em que essas conversões são suprimidas.
Você também pode passar _O_U16TEXT, _O_U8TEXT ou _O_WTEXT para habilitar o modo Unicode, como demonstrado no segundo exemplo mais adiante neste documento.
Cuidado
O modo Unicode é para funções de impressão larga (por exemplo, wprintf) e não tem suporte em funções de impressão estreita. O uso de uma função de impressão estreita em um fluxo de modo Unicode dispara uma assert.
_setmode normalmente é usado para modificar o modo de conversão padrão de stdin e stdout, mas você pode usá-lo em qualquer arquivo. Se você aplicar _setmode ao descritor de arquivo para um fluxo, chame _setmode antes de realizar alguma operação de entrada ou saída no fluxo.
Cuidado
Se você gravar dados em um fluxo de arquivo, limpe explicitamente o código usando fflush antes de usar _setmode para alterar o modo. Se você não limpar o código, pode ocorrer comportamento inesperado. Se você não tiver dados gravados no fluxo, não será preciso limpar o código.
Por padrão, o estado global dessa função tem como escopo o aplicativo. Para alterar esse comportamento, confira Estado global no CRT.
Requisitos
| Rotina | Cabeçalho necessário | Cabeçalhos opcionais |
|---|---|---|
_setmode |
<io.h> |
<fcntl.h> |
Para obter informações sobre compatibilidade, consulte Compatibilidade.
Exemplo: Usar _setmode para alterar o 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
Exemplo: Usar _setmode para alterar o 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;
}
Confira também
Manipulação de arquivos
_creat, _wcreat
fopen, _wfopen
_open, _wopen
_set_fmode