_setmode
Establece el modo de traducción del archivo.
Sintaxis
int _setmode (
int fd,
int mode
);
Parámetros
fd
Descriptor del archivo.
mode
Nuevo modo de traducción.
Valor devuelto
Si es correcto, devuelve el modo de traducción anterior.
Si se pasan parámetros no válidos a esta función, se invoca el controlador de parámetros no válidos, como se describe en Validación de parámetros. Si la ejecución puede continuar, esta función devuelve –1 y establece errno
en EBADF
(que indica un descriptor de archivo no válido) o en EINVAL
(que indica un argumento mode
no válido).
Para obtener más información sobre estos y otros códigos de retorno, vea errno
, _doserrno
, _sys_errlist
y _sys_nerr
.
Comentarios
La función _setmode
establece en mode
el modo de traducción del archivo proporcionado por fd
. Pasar _O_TEXT
como mode
establece el modo de texto ANSI (es decir, traducido). Las combinaciones retorno de carro-salto de línea (CR-LF) se traducen en un carácter de salto de línea único en la entrada. Los caracteres de salto de línea se traducen a combinaciones CR-LF en la salida. Si se pasa _O_BINARY
, se establece el modo binario (sin traducir), donde se eliminan las traducciones.
También se puede pasar _O_U16TEXT
, _O_U8TEXT
o __O_WTEXT
para permitir el modo Unicode, tal y como se refleja en el segundo ejemplo más adelante en este documento.
Precaución
El modo Unicode es para funciones de impresión anchas (por ejemplo, wprintf
) y no se admite para funciones de impresión estrechas. El uso de una función de impresión estrecha en una secuencia en modo Unicode desencadena una aserción.
_setmode
se suele usar para cambiar el modo de traducción predeterminado de stdin
y stdout
, pero se puede usar en cualquier archivo. Si aplica _setmode
al descriptor de archivo de un flujo, llame a _setmode
antes de realizar una operación de entrada o de salida en el flujo.
Precaución
Si escribe datos en un flujo de archivo, vacíe el código expresamente mediante fflush
antes de usar _setmode
para cambiar el modo. Si no vuelca el código, podría producirse un comportamiento inesperado. Si no ha escrito datos en el flujo, no será necesario volcarlo.
De manera predeterminada, el estado global de esta función está limitado a la aplicación. Para cambiar este comportamiento, consulte Estado global en CRT.
Requisitos
Routine | Encabezado necesario | Encabezados opcionales |
---|---|---|
_setmode |
<io.h> |
<fcntl.h> |
Para obtener más información sobre compatibilidad, consulte Compatibilidad.
Ejemplo: Uso de _setmode
para cambiar 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
Ejemplo: Uso de _setmode
para cambiar 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;
}
Consulte también
Control de archivos
_creat
, _wcreat
fopen
, _wfopen
_open
, _wopen
_set_fmode