_open
, _wopen
Ouvre un fichier. Ces fonctions sont déconseillées, car des versions plus sécurisées sont disponibles ; voir _sopen_s
, _wsopen_s
.
Syntaxe
int _open(
const char *filename,
int oflag [,
int pmode]
);
int _wopen(
const wchar_t *filename,
int oflag [,
int pmode]
);
Paramètres
filename
Nom de fichier.
oflag
Type d'opérations autorisées.
pmode
Mode d'autorisation.
Valeur retournée
Chacune de ces fonctions retourne un descripteur de fichier pour le fichier ouvert. La valeur de retour -1 indique une erreur ; dans ce cas, errno
prend l'une des valeurs suivantes.
Valeur errno |
Condition |
---|---|
EACCES |
Tentative d’ouverture d’un fichier en lecture seule pour l’écriture, le mode de partage du fichier n’autorise pas les opérations spécifiées, ou le chemin donné est un répertoire. |
EEXIST |
Indicateurs _O_CREAT et _O_EXCL spécifiés, mais filename existe déjà. |
EINVAL |
Argument oflag ou pmode non valide. |
EMFILE |
Plus aucun descripteur de fichier n'est disponible (trop de fichiers sont ouverts). |
ENOENT |
Fichier ou chemin d’accès introuvable. |
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 _open
ouvre le fichier spécifié par filename
et le prépare pour la lecture ou l'écriture, comme spécifié par oflag
. _wopen
est une version à caractères larges de _open
; l'argument filename
de _wopen
est une chaîne à caractères larges. Sinon,_wopen
et _open
se comportent de la même façon.
Mappages de routines de texte générique
Routine <tchar.h> |
_UNICODE et _MBCS non définis |
_MBCS défini |
_UNICODE défini |
---|---|---|---|
_topen |
_open |
_open |
_wopen |
oflag
est une expression entière formée à partir d’une ou plusieurs des constantes manifestes ou combinaisons de constantes suivantes, qui sont définies dans <fcntl.h>
.
oflag constant |
Comportement |
---|---|
_O_APPEND |
Déplace le pointeur de fichier à la fin du fichier avant chaque opération d'écriture. |
_O_BINARY |
Ouvre le fichier en mode binaire (non traduit). (Consultez fopen la description du mode binaire.) |
_O_CREAT |
Crée un fichier et l'ouvre pour l'accès en écriture. N'a aucun effet si le fichier spécifié par filename existe. L'argument pmode est obligatoire quand _O_CREAT est spécifié. |
_O_CREAT | _O_SHORT_LIVED |
Crée un fichier en tant que temporaire et, si possible, ne se vide pas sur le disque. L'argument pmode est obligatoire quand _O_CREAT est spécifié. |
_O_CREAT | _O_TEMPORARY |
Crée un fichier temporaire ; le fichier est supprimé quand le dernier descripteur de fichier est fermé. L'argument pmode est obligatoire quand _O_CREAT est spécifié. Pour conserver le comportement hérité pour la compatibilité des applications, d’autres processus ne sont pas empêchés de supprimer ce fichier. |
_O_CREAT | _O_EXCL |
Retourne une valeur d'erreur s'il existe un fichier spécifié par filename . Applicable uniquement en cas d'utilisation avec _O_CREAT . |
_O_NOINHERIT |
Empêche la création d'un descripteur de fichier partagé. |
_O_RANDOM |
Indique que la mise en cache est optimisée pour, mais non limitée à, l'accès aléatoire à partir du disque. |
_O_RDONLY |
Ouvre un fichier pour l'accès en lecture uniquement. Impossible de spécifier avec _O_RDWR ou _O_WRONLY . |
_O_RDWR |
Ouvre un fichier pour l'accès en lecture et en écriture. Impossible de spécifier avec _O_RDONLY ou _O_WRONLY . |
_O_SEQUENTIAL |
Indique que la mise en cache est optimisée pour, mais non limitée à, l'accès séquentiel à partir du disque. |
_O_TEXT |
Ouvre un fichier en mode texte ANSI (traduit). (Pour plus d’informations, consultez Fichier d’E/S en mode texte et binaire et fopen .) |
_O_TRUNC |
Ouvre un fichier et le tronque à une longueur nulle. Le fichier doit disposer d'une autorisation en écriture. Impossible de spécifier _O_RDONLY avec . _O_TRUNC utilisé avec _O_CREAT ouvre un fichier existant ou crée un fichier. Remarque : l’indicateur _O_TRUNC détruit le contenu du fichier spécifié. |
_O_WRONLY |
Ouvre un fichier pour l'accès en écriture uniquement. Impossible de spécifier avec _O_RDONLY ou _O_RDWR . |
_O_U16TEXT |
Ouvre un fichier en mode Unicode UTF-16. |
_O_U8TEXT |
Ouvre un fichier en mode Unicode UTF-8. |
_O_WTEXT |
Ouvre un fichier en mode Unicode. |
Pour spécifier le mode d'accès au fichier, vous devez spécifier _O_RDONLY
, _O_RDWR
ou _O_WRONLY
. Il n’existe aucune valeur par défaut pour le mode d’accès.
Si _O_WTEXT
est utilisé pour ouvrir un fichier pour l'accès en lecture, _open
lit le début du fichier et recherche une marque d'ordre d'octet. S’il existe un boM, le fichier est traité comme UTF-8 ou UTF-16LE, selon le boM. Dans le cas contraire, le fichier est considéré comme étant au format ANSI. Quand un fichier est ouvert pour l'accès en écriture à l'aide de _O_WTEXT
, UTF-16 est utilisé. Quel que soit le paramètre précédent ou la marque d'ordre d'octet, si _O_U8TEXT
est utilisé, le fichier est toujours ouvert en UTF-8 ; si _O_U16TEXT
est utilisé, le fichier est toujours ouvert en UTF-16.
Quand un fichier est ouvert en mode Unicode à l'aide d'_O_WTEXT
, _O_U8TEXT
ou _O_U16TEXT
, les fonctions d'entrée traduisent les données qui sont lues à partir du fichier en données UTF-16 stockées comme type wchar_t
. Les fonctions qui écrivent dans un fichier ouvert en mode Unicode attendent des mémoires tampons qui contiennent des données UTF-16 stockées comme type wchar_t
. Si le fichier est encodé en UTF-8, les données UTF-16 sont traduites en UTF-8 lorsqu’elles sont écrites. Le contenu encodé en UTF-8 du fichier est traduit en UTF-16 lorsqu’il est lu. Toute tentative de lecture ou d'écriture d'un nombre impair d'octets en mode Unicode provoque une erreur de validation de paramètre . Pour lire ou écrire des données stockées dans votre programme au format UTF-8, utilisez un mode de fichier binaire ou texte au lieu d'un mode Unicode. Vous êtes responsable de toute traduction d’encodage requise.
Si _open
est appelée avec _O_WRONLY | _O_APPEND
(mode Append) et _O_WTEXT
, _O_U16TEXT
ou _O_U8TEXT
, elle tente d'abord d'ouvrir le fichier pour la lecture et l'écriture, de lire la marque BOM, puis de le rouvrir pour l'accès en écriture uniquement. Si l'ouverture du fichier pour l'accès en lecture et en écriture échoue, elle ouvre le fichier pour l'accès en écriture uniquement et utilise la valeur par défaut pour le paramètre de mode Unicode.
Quand plusieurs constantes manifestes sont utilisées pour former l’argument oflag
, les constantes sont combinées avec l’opérateur OR au niveau du bit ( |
). Pour une discussion sur les modes binaire et texte, consultez E/S de fichier de fichier texte et binaire.
L'argument pmode
est obligatoire uniquement quand _O_CREAT
est spécifié. Si le fichier existe déjà, pmode
est ignoré. Sinon, pmode
spécifie les paramètres d'autorisation du fichier, qui sont définis quand le nouveau fichier est fermé pour la première fois. _open
applique le masque d'autorisation de fichier actif à pmode
avant que les autorisations soient définies. (Pour plus d’informations, consultez _umask
.) pmode
est une expression entière qui contient une ou les deux constantes de manifeste suivantes, qui sont définies dans <sys\stat.h>
.
pmode |
Signification |
---|---|
_S_IREAD |
Lecture autorisée uniquement. |
_S_IWRITE |
Écriture autorisée. (En fait, autorise la lecture et l'écriture.) |
_S_IREAD | _S_IWRITE |
Lecture et écriture autorisées. |
Lorsque les deux constantes sont fournies, elles sont jointes à l’opérateur OR au niveau du bit ( |
). Dans Windows, tous les fichiers sont lisibles ; L’autorisation en écriture seule n’est pas disponible. Par conséquent, les modes _S_IWRITE
et _S_IREAD
| _S_IWRITE
sont équivalents.
Si une valeur autre que certaines combinaisons et _S_IREAD
_S_IWRITE
est spécifiée pour pmode
(même si elle spécifie une valeur valide dans un autre système d’exploitation) ou si une valeur autre que les valeurs autorisées oflag
est spécifiée, la fonction génère une assertion en mode Débogage et appelle le gestionnaire de paramètres non validepmode
, comme décrit dans la validation des paramètres. Si l'exécution est autorisée à se poursuivre, la fonction retourne -1 et définit errno
avec la valeur EINVAL
.
Spécifications
Fonction | En-tête requis | En-tête facultatif |
---|---|---|
_open |
<io.h> |
<fcntl.h> , , <sys\types.h> <sys\stat.h> |
_wopen |
<io.h> ou <wchar.h> |
<fcntl.h> , , <sys\types.h> <sys\stat.h> |
_open
et _wopen
sont des extensions Microsoft. Pour plus d’informations sur la compatibilité, consultez Compatibility.
Bibliothèques
Toutes les versions des bibliothèques Runtime C.
Exemple
// crt_open.c
// compile with: /W3
/* This program uses _open to open a file
* named CRT_OPEN.C for input and a file named CRT_OPEN.OUT
* for output. The files are then closed.
*/
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <io.h>
#include <stdio.h>
int main( void )
{
int fh1, fh2;
fh1 = _open( "CRT_OPEN.C", _O_RDONLY ); // C4996
// Note: _open is deprecated; consider using _sopen_s instead
if( fh1 == -1 )
perror( "Open failed on input file" );
else
{
printf( "Open succeeded on input file\n" );
_close( fh1 );
}
fh2 = _open( "CRT_OPEN.OUT",
_O_WRONLY | _O_CREAT,
_S_IREAD | _S_IWRITE ); // C4996
if( fh2 == -1 )
perror( "Open failed on output file" );
else
{
printf( "Open succeeded on output file\n" );
_close( fh2 );
}
}
Sortie
Open succeeded on input file
Open succeeded on output file
Voir aussi
E/S de bas niveau
_chmod
, _wchmod
_close
_creat
, _wcreat
_dup
, _dup2
fopen
, _wfopen
_sopen
, _wsopen