_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 EBADF
l’un des éléments suivants : un descripteur de fichier non valide ou EINVAL
un argument non valide mode
.
Pour plus d’informations sur ces codes de retour et d’autres codes de retour, consultez , , _sys_errlist
_doserrno
et _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_U8TEXT
ou _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) wprintf
et 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