_open, _wopen_open, _wopen

Ouvre un fichier.Opens a file. Ces fonctions sont dépréciées, car des versions plus sécurisées sont disponibles. Consultez _sopen_s, _wsopen_s.These functions are deprecated because more-secure versions are available; see _sopen_s, _wsopen_s.

SyntaxeSyntax

int _open(
   const char *filename,
   int oflag [,
   int pmode]
);
int _wopen(
   const wchar_t *filename,
   int oflag [,
   int pmode]
);

ParamètresParameters

filenamefilename
Nom du fichier.File name.

oflagoflag
Type d'opérations autorisées.The kind of operations allowed.

pmodepmode
Mode d'autorisation.Permission mode.

Valeur de retourReturn Value

Chacune de ces fonctions retourne un descripteur de fichier pour le fichier ouvert.Each of these functions returns a file descriptor for the opened file. Une valeur de retour de-1 indique une erreur ; dans ce cas, errno est défini sur l’une des valeurs suivantes.A return value of -1 indicates an error; in that case errno is set to one of the following values.

Valeur de la variable errnoerrno value ConditionCondition
EACCESEACCES A essayé d'ouvrir un fichier en lecture seule pour un accès en écriture, le mode de partage du fichier n'autorise pas les opérations spécifiées ou le chemin d'accès donné est un répertoire.Tried to open a read-only file for writing, file's sharing mode does not allow the specified operations, or the given path is a directory.
EEXISTEEXIST Les indicateurs _O_CREAT et _O_EXCL spécifiés, mais le nom de fichier existe déjà._O_CREAT and _O_EXCL flags specified, but filename already exists.
EINVALEINVAL Argument Oflag ou PMODE non valide.Invalid oflag or pmode argument.
EMFILEEMFILE Plus aucun descripteur de fichier n'est disponible (trop de fichiers sont ouverts).No more file descriptors are available (too many files are open).
ENOENTENOENT Fichier ou chemin d’accès introuvable.File or path not found.

Pour plus d’informations sur ces codes de retour et les autres, consultez errno, _doserrno, _sys_errlist et _sys_nerr.For more information about these and other return codes, see errno, _doserrno, _sys_errlist, and _sys_nerr.

NotesRemarks

La fonction _open ouvre le fichier spécifié par filename et la prépare pour la lecture ou l’écriture, comme spécifié par Oflag.The _open function opens the file specified by filename and prepares it for reading or writing, as specified by oflag. _wopen est une version à caractères larges de _open; l’argument filename de _wopen est une chaîne de caractères larges._wopen is a wide-character version of _open; the filename argument to _wopen is a wide-character string. dans le cas contraire, _wopen et _open se comportent de la même façon._wopen and _open behave identically otherwise.

Mappages de routines de texte génériqueGeneric-Text Routine Mappings

Routine Tchar.hTchar.h routine _UNICODE et _MBCS non définis_UNICODE and _MBCS not defined _MBCS défini_MBCS defined _UNICODE défini_UNICODE defined
_topen_topen _open_open _open_open _wopen_wopen

Oflag est une expression d’entier formée à partir d’une ou plusieurs des constantes manifestes ou combinaisons de constantes suivantes <, qui sont définies dans fcntl. h >.oflag is an integer expression formed from one or more of the following manifest constants or constant combinations, which are defined in <fcntl.h>.

Oflag constante)oflag constant ComportementBehavior
_O_APPEND_O_APPEND Déplace le pointeur de fichier à la fin du fichier avant chaque opération d'écriture.Moves the file pointer to the end of the file before every write operation.
_O_BINARY_O_BINARY Ouvre le fichier en mode binaire (non traduit).Opens the file in binary (untranslated) mode. (Pour obtenir une description du mode binaire, consultez fopen.)(See fopen for a description of binary mode.)
_O_CREAT_O_CREAT Crée un fichier et l'ouvre pour l'accès en écriture.Creates a file and opens it for writing. N’a aucun effet si le fichier spécifié par filename existe.Has no effect if the file specified by filename exists. L’argument PMODE est obligatoire lorsque _O_CREAT est spécifié.The pmode argument is required when _O_CREAT is specified.
_O_CREAT | _O_SHORT_LIVED_O_CREAT | _O_SHORT_LIVED Crée un fichier temporaire et, dans la mesure du possible, n'effectue pas de vidage sur disque.Creates a file as temporary and if possible does not flush to disk. L’argument PMODE est obligatoire lorsque _O_CREAT est spécifié.The pmode argument is required when _O_CREAT is specified.
_O_CREAT | _O_TEMPORARY_O_CREAT | _O_TEMPORARY Crée un fichier temporaire ; le fichier est supprimé quand le dernier descripteur de fichier est fermé.Creates a file as temporary; the file is deleted when the last file descriptor is closed. L’argument PMODE est obligatoire lorsque _O_CREAT est spécifié.The pmode argument is required when _O_CREAT is specified.
_O_CREAT | _O_EXCL_O_CREAT | _O_EXCL Retourne une valeur d’erreur s’il existe un fichier spécifié par filename .Returns an error value if a file specified by filename exists. S’applique uniquement lorsqu’il est utilisé avec _O_CREAT.Applies only when used with _O_CREAT.
_O_NOINHERIT_O_NOINHERIT Empêche la création d'un descripteur de fichier partagé.Prevents creation of a shared file descriptor.
_O_RANDOM_O_RANDOM Indique que la mise en cache est optimisée pour, mais non limitée à, l'accès aléatoire à partir du disque.Specifies that caching is optimized for, but not restricted to, random access from disk.
_O_RDONLY_O_RDONLY Ouvre un fichier pour l'accès en lecture uniquement.Opens a file for reading only. Ne peut pas être spécifié avec _O_RDWR ou _O_WRONLY.Cannot be specified with _O_RDWR or _O_WRONLY.
_O_RDWR_O_RDWR Ouvre un fichier pour l'accès en lecture et en écriture.Opens a file for both reading and writing. Ne peut pas être spécifié avec _O_RDONLY ou _O_WRONLY.Cannot be specified with _O_RDONLY or _O_WRONLY.
_O_SEQUENTIAL_O_SEQUENTIAL Indique que la mise en cache est optimisée pour, mais non limitée à, l'accès séquentiel à partir du disque.Specifies that caching is optimized for, but not restricted to, sequential access from disk.
_O_TEXT_O_TEXT Ouvre un fichier en mode texte (traduit).Opens a file in text (translated) mode. (Pour plus d’informations, consultez E/S de fichier en mode texte et binaire et fopen.)(For more information, see Text and Binary Mode File I/O and fopen.)
_O_TRUNC_O_TRUNC Ouvre un fichier et le tronque à une longueur nulle. Le fichier doit disposer d'une autorisation en écriture.Opens a file and truncates it to zero length; the file must have write permission. Ne peut pas être spécifié avec _O_RDONLY.Cannot be specified with _O_RDONLY. _O_TRUNC utilisé avec _O_CREAT ouvre un fichier existant ou crée un fichier._O_TRUNC used with _O_CREAT opens an existing file or creates a file. Remarque : L’indicateur _O_TRUNC détruit le contenu du fichier spécifié.Note: The _O_TRUNC flag destroys the contents of the specified file.
_O_WRONLY_O_WRONLY Ouvre un fichier pour l'accès en écriture uniquement.Opens a file for writing only. Ne peut pas être spécifié avec _O_RDONLY ou _O_RDWR.Cannot be specified with _O_RDONLY or _O_RDWR.
_O_U16TEXT_O_U16TEXT Ouvre un fichier en mode Unicode UTF-16.Opens a file in Unicode UTF-16 mode.
_O_U8TEXT_O_U8TEXT Ouvre un fichier en mode Unicode UTF-8.Opens a file in Unicode UTF-8 mode.
_O_WTEXT_O_WTEXT Ouvre un fichier en mode Unicode.Opens a file in Unicode mode.

Pour spécifier le mode d’accès au fichier, vous devez spécifier _O_RDONLY, _O_RDWRou _O_WRONLY.To specify the file access mode, you must specify either _O_RDONLY, _O_RDWR, or _O_WRONLY. Il n'y a aucune valeur par défaut pour le mode d'accès.There is no default value for the access mode.

Si _O_WTEXT est utilisé pour ouvrir un fichier en lecture, _open lit le début du fichier et recherche une marque d’ordre d’octet (BOM).If _O_WTEXT is used to open a file for reading, _open reads the beginning of the file and checks for a byte order mark (BOM). S'il en existe une, le fichier est considéré comme étant au format UTF-8 ou UTF-16LE, selon la marque d'ordre d'octet.If there is a BOM, the file is treated as UTF-8 or UTF-16LE, depending on the BOM. Dans le cas contraire, le fichier est considéré comme étant au format ANSI.If no BOM is present, the file is treated as ANSI. Lorsqu’un fichier est ouvert en écriture à l’aide de _O_WTEXT, UTF-16 est utilisé.When a file is opened for writing by using _O_WTEXT, UTF-16 is used. 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.Regardless of any previous setting or byte order mark, if _O_U8TEXT is used, the file is always opened as UTF-8; if _O_U16TEXT is used, the file is always opened as UTF-16.

Lorsqu’un fichier est ouvert en mode Unicode à l’aide de _O_WTEXT, _O_U8TEXTou _O_U16TEXT, les fonctions d’entrée traduisent les données lues à partir du fichier en données UTF-16 stockées en tant que type wchar_t.When a file is opened in Unicode mode by using _O_WTEXT, _O_U8TEXT, or _O_U16TEXT, input functions translate the data that's read from the file into UTF-16 data stored as 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 en tant que type wchar_t.Functions that write to a file opened in Unicode mode expect buffers that contain UTF-16 data stored as type wchar_t. Si le fichier est encodé au format UTF-8, les données UTF-16 sont traduites en UTF-8 lors de leur écriture et le contenu du fichier encodé au format UTF-8 est traduit en UTF-16 lorsqu'il est lu.If the file is encoded as UTF-8, then UTF-16 data is translated into UTF-8 when it is written, and the file's UTF-8-encoded content is translated into UTF-16 when it is read. Toute tentative de lecture ou d'écriture d'une quantité impaire d'octets en mode Unicode provoque une erreur de validation de paramètre.An attempt to read or write an odd number of bytes in Unicode mode causes a parameter validation error. 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.To read or write data that's stored in your program as UTF-8, use a text or binary file mode instead of a Unicode mode. Vous êtes responsable de toute traduction d'encodage nécessaire.You are responsible for any required encoding translation.

Si _open est appelé avec _O_WRONLY | _O_APPEND (mode Append) et _O_WTEXT, _O_U16TEXTou _O_U8TEXT, il tente d’abord d’ouvrir le fichier pour la lecture et l’écriture, de lire la nomenclature, puis de la rouvrir pour écriture uniquement.If _open is called with _O_WRONLY | _O_APPEND (append mode) and _O_WTEXT, _O_U16TEXT, or _O_U8TEXT, it first tries to open the file for reading and writing, read the BOM, then reopen it for writing only. 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.If opening the file for reading and writing fails, it opens the file for writing only and uses the default value for the Unicode mode setting.

Lorsqu’au moins deux constantes manifestes sont utilisées pour former l’argument Oflag , les constantes sont combinées avec l’opérateur or au | niveau du bit ().When two or more manifest constants are used to form the oflag argument, the constants are combined with the bitwise-OR operator ( | ). Pour en savoir plus sur les modes binaire et texte, consultez E/S de fichier en mode texte et binaire.For a discussion of binary and text modes, see Text and Binary Mode File I/O.

L’argument PMODE est requis uniquement lorsque _O_CREAT est spécifié.The pmode argument is required only when _O_CREAT is specified. Si le fichier existe déjà, PMODE est ignoré.If the file already exists, pmode is ignored. Sinon, PMODE spécifie les paramètres d’autorisation de fichier, qui sont définis quand le nouveau fichier est fermé la première fois.Otherwise, pmode specifies the file permission settings, which are set when the new file is closed the first time. _open applique le masque d’autorisation de fichier actuel à PMODE avant que les autorisations soient définies._open applies the current file-permission mask to pmode before the permissions are set. (Pour plus d’informations, consultez _umask.) PMODE est une expression entière qui contient l’une des constantes manifestes suivantes, ou les deux, qui <sont définies dans sys\stat.h >.(For more information, see _umask.) pmode is an integer expression that contains one or both of the following manifest constants, which are defined in <sys\stat.h>.

pmodepmode SignificationMeaning
_S_IREAD_S_IREAD Lecture autorisée uniquement.Only reading permitted.
_S_IWRITE_S_IWRITE Écriture autorisée.Writing permitted. (En fait, autorise la lecture et l'écriture.)(In effect, permits reading and writing.)
_S_IREAD | _S_IWRITE_S_IREAD | _S_IWRITE Lecture et écriture autorisées.Reading and writing permitted.

Quand les deux constantes sont données, elles sont jointes avec l’opérateur or au | niveau du bit ().When both constants are given, they are joined with the bitwise-OR operator ( | ). Dans Windows, tous les fichiers sont lisibles ; l'autorisation d'écriture seule n'est pas disponible.In Windows, all files are readable; write-only permission is not available. Par conséquent, les modes _S_IWRITE et _S_IREAD | _S_IWRITE sont équivalents.Therefore, the modes _S_IWRITE and _S_IREAD | _S_IWRITE are equivalent.

Si une valeur autre qu’une combinaison de _S_IREAD et _S_IWRITE est spécifiée pour PMODE, même si elle spécifie un PMODE valide dans un autre système d’exploitation, ou si une valeur autre que les valeurs Oflag autorisées est spécifié, la fonction génère une assertion en mode débogage et appelle le gestionnaire de paramètre non valide, comme décrit dans validation de paramètre.If a value other than some combination of _S_IREAD and _S_IWRITE is specified for pmode—even if it would specify a valid pmode in another operating system—or if any value other than the allowed oflag values is specified, the function generates an assertion in Debug mode and invokes the invalid parameter handler, as described in Parameter Validation. Si l’exécution est autorisée à se poursuivre, la fonction retourne-1 et définit errno sur EINVAL.If execution is allowed to continue, the function returns -1 and sets errno to EINVAL.

Configuration requiseRequirements

RoutineRoutine En-tête requisRequired header En-tête facultatifOptional header
_open_open <io.h><io.h> <fcntl.h>, <sys\types.h>, <sys\stat.h><fcntl.h>, <sys\types.h>, <sys\stat.h>
_wopen_wopen <io.h> ou <wchar.h><io.h> or <wchar.h> <fcntl.h>, <sys\types.h>, <sys\stat.h><fcntl.h>, <sys\types.h>, <sys\stat.h>

_open et _wopen sont des extensions Microsoft._open and _wopen are Microsoft extensions. Pour plus d'informations sur la compatibilité, voir Compatibilité.For more compatibility information, see Compatibility.

BibliothèquesLibraries

Toutes les versions des bibliothèques Runtime C.All versions of the C run-time libraries.

ExemplesExample

// 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 );
   }
}

SortieOutput

Open succeeded on input file
Open succeeded on output file

Voir aussiSee also

E/S de bas niveauLow-Level I/O
_chmod, _wchmod_chmod, _wchmod
_close_close
_creat, _wcreat_creat, _wcreat
_dup, _dup2_dup, _dup2
fopen, _wfopenfopen, _wfopen
_sopen, _wsopen_sopen, _wsopen