_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 renvoyé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ètre non valide est appelé, comme décrit dans Validation de paramètre. Si l’exécution est autorisée à se poursuivre, cette fonction retourne-1 et affecte à errno la valeur EBADF, qui indique un descripteur de fichier non valide ou EINVAL, qui indique un argument mode non valide.

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

Notes

La fonction _setmode définit le mode de traduction du fichier donné par FD. Le passage de _O_TEXT en mode définit le mode texte (autrement dit, traduit). Les combinaisons retour chariot-saut de ligne sont traduites en un seul caractère de saut de ligne en entrée. Les caractères de saut de ligne sont traduits en combinaisons retour chariot/saut de ligne en sortie. Le passage de _O_BINARY définit le mode binaire (non traduit), dans lequel ces traductions sont supprimées.

Vous pouvez également passer _O_U16TEXT, _O_U8TEXT ou _O_WTEXT pour 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 larges (par exemple, wprintf ) et n’est pas pris en charge pour les fonctions d’impression étroite. 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 des opérations d’entrée ou de sortie sur le flux.

Attention

Si vous écrivez des données dans un flux de fichier, videz explicitement le code à l’aide de fflush avant d’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 cette valeur, 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 de fichiers
_creat, _wcreat
fopen, _wfopen
_open, _wopen
_set_fmode