Megosztás:


_open, _wopen

Megnyitja a fájlt. Ezek a függvények elavultak, mert biztonságosabb verziók érhetők el; lásd :_sopen_s_wsopen_s .

Szemantika

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

Paraméterek

filename
Fájlnév.

oflag
Az engedélyezett műveletek típusa.

pmode
Engedély mód.

Visszaadott érték

Ezek a függvények egy fájlleírót ad vissza a megnyitott fájlhoz. A -1 visszatérési értéke hibát jelez; ebben az esetben errno a következő értékek egyikére van beállítva.

errno érték Állapot
EACCES Írásvédett fájlt próbált megnyitni, a fájlmegosztási mód nem engedélyezi a megadott műveleteket, vagy a megadott elérési út egy könyvtár.
EEXIST _O_CREAT és _O_EXCL a megadott, de filename már létező jelzők.
EINVAL Érvénytelen oflag vagy pmode argumentum.
EMFILE Nincs több fájlleíró (túl sok fájl van megnyitva).
ENOENT A fájl vagy elérési út nem található.

További információ ezekről és az egyéb visszatérési kódokról: errno, _doserrno, _sys_errlistés _sys_nerr.

Megjegyzések

A _open függvény megnyitja a megadott filename fájlt, és előkészíti azt olvasásra vagy írásra a megadott módon oflag. _wopen _opena (z) ; az filename argumentum _wopen egy széles karakterből álló sztring. _wopen és _open másképp ugyanúgy viselkedik.

Általános szöveges rutinleképezések

<tchar.h> rutin _UNICODE és _MBCS nincs definiálva _MBCS definiálva _UNICODE definiálva
_topen _open _open _wopen

oflag az alábbi jegyzékállandók vagy állandó kombinációk közül egy vagy több egész számból álló kifejezés, amely a következőben <fcntl.h>van definiálva: .

oflag konstans Magatartás
_O_APPEND Minden írási művelet előtt vigye a fájlmutatót a fájl végére.
_O_BINARY Megnyitja a fájlt bináris (nem lefordított) módban. (Lásd fopen a bináris mód leírását.)
_O_CREAT Létrehoz egy fájlt, és megnyitja az íráshoz. Nincs hatása, ha a megadott filename fájl létezik. Az pmode argumentum megadása kötelező _O_CREAT .
_O_CREAT | _O_SHORT_LIVED Ideiglenesként hoz létre egy fájlt, és ha lehetséges, nem öblíti le a lemezt. Az pmode argumentum megadása kötelező _O_CREAT .
_O_CREAT | _O_TEMPORARY Ideiglenes fájl létrehozása; a fájl az utolsó fájlleíró bezárásakor törlődik. Az pmode argumentum megadása kötelező _O_CREAT . Az alkalmazáskompatibilitás örökölt viselkedésének megőrzése érdekében más folyamatok nem tiltják le a fájl törlését.
_O_CREAT | _O_EXCL Hibaértéket ad vissza, ha létezik egy megadott filename fájl. Csak akkor érvényes, ha a _O_CREAT.
_O_NOINHERIT Megakadályozza a megosztott fájlleíró létrehozását.
_O_RANDOM Azt adja meg, hogy a gyorsítótárazás a lemezről való véletlenszerű hozzáférésre van optimalizálva, de nem korlátozva.
_O_RDONLY Csak olvasásra szolgáló fájlt nyit meg. Nem adhatók meg a vagy a _O_RDWR_O_WRONLY.
_O_RDWR Megnyit egy fájlt olvasáshoz és íráshoz is. Nem adhatók meg a vagy a _O_RDONLY_O_WRONLY.
_O_SEQUENTIAL Megadja, hogy a gyorsítótárazás a lemezről való szekvenciális hozzáférésre van optimalizálva, de nem korlátozva.
_O_TEXT Fájl megnyitása ANSI-szöveg (lefordított) módban. További információ: Szöveg és bináris módú fájl I/O és fopen.
_O_TRUNC Megnyit egy fájlt, és nulla hosszúságúra csonkolja; a fájlnak írási engedéllyel kell rendelkeznie. Nem adható meg a _O_RDONLY. _O_TRUNC egy meglévő fájl megnyitásához _O_CREAT vagy egy fájl létrehozásához használható. Jegyzet: A _O_TRUNC jelző megsemmisíti a megadott fájl tartalmát.
_O_WRONLY Csak írásra szolgáló fájlt nyit meg. Nem adhatók meg a vagy a _O_RDONLY_O_RDWR.
_O_U16TEXT Fájl megnyitása Unicode UTF-16 módban.
_O_U8TEXT Fájl megnyitása Unicode UTF-8 módban.
_O_WTEXT Fájl megnyitása Unicode módban.

A fájlelérési mód megadásához meg kell adnia _O_RDONLYaz , _O_RDWRvagy _O_WRONLYa . A hozzáférési módnak nincs alapértelmezett értéke.

Ha _O_WTEXT egy fájl olvasásra való megnyitására szolgál, beolvassa a fájl elejét, _open és egy bájtsorrend-jelet (BOM) keres. BOM esetén a rendszer UTF-8 vagy UTF-16LE formátumban kezeli a fájlt az anyagjegyzéktől függően. Ha nincs BOM, a fájl ANSI-ként lesz kezelve. Ha egy fájl írásra van megnyitva az UTF-16 használatával _O_WTEXT, az UTF-16 lesz használatban. A korábbi beállítástól vagy bájtsorrendtől függetlenül a _O_U8TEXT rendszer mindig UTF-8-ként nyitja meg a fájlt, használat esetén _O_U16TEXT a fájl mindig UTF-16-ként nyílik meg.

Ha egy fájl Unicode módban _O_WTEXTvan megnyitva, _O_U8TEXT_O_U16TEXTa bemeneti függvények a fájlból beolvasott adatokat UTF-16 típusú wchar_tadatokká fordítják le. A Unicode módban megnyitott fájlba író függvények olyan puffereket várnak, amelyek wchar_ttípusként tárolt UTF-16 adatokat tartalmaznak. Ha a fájl UTF-8 kódolású, akkor az UTF-16-adatok le lesznek fordítva UTF-8-ra, amikor meg van írva. A fájl UTF-8 kódolású tartalma olvasáskor UTF-16-ra lesz lefordítva. A Unicode módban páratlan számú bájt olvasására vagy írására tett kísérlet paraméterérvényesítési hibát okoz. A programban UTF-8-ként tárolt adatok olvasásához vagy írásához Unicode-mód helyett szöveg- vagy bináris fájlmódot használjon. Ön a felelős minden szükséges kódolási fordításért.

Ha _open (hozzáfűzési _O_WRONLY | _O_APPEND módban) van meghívva, és _O_WTEXT, _O_U16TEXTvagy _O_U8TEXTelőször megpróbálja megnyitni a fájlt olvasásra és írásra, olvassa el az anyagjegyzéket, majd nyissa meg újra írásra. Ha nem sikerül megnyitni a fájlt olvasásra és írásra, az csak írásra nyitja meg a fájlt, és a Unicode mód beállításának alapértelmezett értékét használja.

Ha két vagy több jegyzékállandót használ az oflag argumentum létrehozásához, az állandók a bitenkénti VAGY operátorral ( | ) vannak kombinálva. A bináris és szöveges módokkal kapcsolatos vitafórumért lásd: Szöveg és bináris módú fájl I/O.

Az pmode argumentum csak akkor kötelező, ha _O_CREAT meg van adva. Ha a fájl már létezik, pmode a rendszer figyelmen kívül hagyja. pmode Ellenkező esetben megadja azokat a fájlengedély-beállításokat, amelyek az új fájl első bezárásakor lesznek beállítva. _open az engedélyek beállítása előtt alkalmazza az aktuális fájlengedély-maszkot pmode . További információért lásd _umask. pmode egy egész szám kifejezés, amely a következő jegyzékállandók egyikét vagy mindkettőt tartalmazza, amelyek a következőben <sys\stat.h>vannak definiálva: .

pmode Értelmezés
_S_IREAD Csak olvasás engedélyezett.
_S_IWRITE Írás engedélyezett. (Valójában engedélyezi az olvasást és az írást.)
_S_IREAD | _S_IWRITE Olvasás és írás engedélyezett.

Ha mindkét állandót megadja, a bitenkénti VAGY operátorral ( | ) csatlakozik. Windows rendszerben minden fájl olvasható; Írásvédett engedély nem érhető el. Ezért a módok _S_IWRITE és _S_IREAD | _S_IWRITE egyenértékűek.

Ha a függvény nem az egyes kombinációk valamelyikéhez _S_IREAD van megadva – _S_IWRITE még akkor is, ha egy másik operációs rendszerben érvényes pmode értéket adna pmodemeg –, vagy ha az engedélyezett oflag értékeken kívül más érték van megadva, a függvény hibakeresési módban állít elő egy állítást, és meghívja az érvénytelen paraméterkezelőt a paraméterérvényesítésben leírtak szerint. Ha a végrehajtás folytatva van, a függvény -1 ad vissza, és a következőre állítja be errno : EINVAL.

Követelmények

Funkció Kötelező fejléc Nem kötelező fejléc
_open <io.h> \, \, \
_wopen <io.h> vagy <wchar.h> \, \, \

_open és _wopen Microsoft-bővítmények. További kompatibilitási információkért lásd: Kompatibilitás.

Könyvtárak

A C futásidejű kódtárak minden verziója.

példa

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

Kimenet

Open succeeded on input file
Open succeeded on output file

Lásd még

Alacsony szintű I/O
_chmod, _wchmod
_close
_creat, _wcreat
_dup, _dup2
fopen, _wfopen
_sopen, _wsopen