_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. Si se pasa _O_TEXT como mode, se establece el modo de texto (esto es, 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