Partager via


_setmode

Définit le mode de traduction des fichiers.

Syntaxe

int _setmode (
   int fd,
   int mode
);

Paramètres

fd
Descripteur de fichier.

mode
Nouveau mode de traduction.

Valeur retournée

En cas de réussite, retourne le mode de traduction précédent.

Si des paramètres non valides sont passés à cette fonction, le gestionnaire de paramètres non valides est appelé, comme décrit dans la validation des paramètres. Si l’exécution est autorisée à continuer, cette fonction retourne -1 et définit errno sur EBADFl’un des éléments suivants : un descripteur de fichier non valide ou EINVALun argument non valide mode .

Pour plus d’informations sur ces codes de retour et d’autres codes de retour, consultez , , _sys_errlist_doserrnoet _sys_nerr.errno

Notes

La fonction _setmode affecte la valeur mode au mode de traduction du fichier donné par fd. Passer _O_TEXT en tant que mode définit le mode texte ANSI (autrement dit, traduit). Les combinaisons de saut de ligne de retour chariot (CR-LF) sont traduites en un seul caractère de flux de ligne lors de l’entrée. Les caractères de saut de ligne sont traduits en combinaisons retour chariot/saut de ligne en sortie. Le passage de la valeur _O_BINARY définit le mode binaire (non traduit), dans lequel ces traductions sont supprimées.

Vous pouvez également passer _O_U16TEXT, _O_U8TEXTou _O_WTEXT activer le mode Unicode, comme illustré dans le deuxième exemple plus loin dans ce document.

Attention

Le mode Unicode est destiné aux fonctions d’impression large (par exemple) wprintfet n’est pas pris en charge pour les fonctions d’impression étroites. L’utilisation d’une fonction d’impression étroite sur un flux en mode Unicode déclenche une assertion.

_setmode est généralement utilisé pour modifier le mode de traduction par défaut de stdin et stdout, mais vous pouvez l'utiliser sur n'importe quel fichier. Si vous appliquez _setmode au descripteur de fichier pour un flux, appelez _setmode avant d'effectuer toute opération d'entrée ou de sortie sur le flux.

Attention

Si vous écrivez des données dans un flux de fichiers, videz explicitement le code fflush avant de l’utiliser _setmode pour modifier le mode. Si vous ne videz pas le code, un comportement inattendu peut se produire. Si vous n'avez pas écrit de données dans le flux, vous n'avez pas à vider le code.

Par défaut, l’état global de cette fonction est limité à l’application. Pour modifier ce comportement, consultez État global dans le CRT.

Spécifications

Routine En-tête requis En-têtes facultatifs
_setmode <io.h> <fcntl.h>

Pour plus d’informations sur la compatibilité, consultez Compatibility.

Exemple : Utiliser _setmode pour modifier 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

Exemple : Utiliser _setmode pour modifier 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;
}

Voir aussi

Gestion des fichiers
_creat, _wcreat
fopen, _wfopen
_open, _wopen
_set_fmode