Sdílet prostřednictvím


_open, _wopen

Otevře soubor. Tyto funkce jsou zastaralé, protože jsou k dispozici bezpečnější verze; viz _sopen_s, _wsopen_s.

Syntaxe

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

Parametry

filename
Název souboru

oflag
Druh operací je povolený.

pmode
Režim oprávnění.

Vrácená hodnota

Každá z těchto funkcí vrátí popisovač souboru otevřeného souboru. Návratová hodnota -1 označuje chybu; v takovém případě errno je nastavená na jednu z následujících hodnot.

errno hodnota Podmínka
EACCES Pokus o otevření souboru jen pro čtení pro zápis, režim sdílení souboru neumožňuje zadané operace nebo daná cesta je adresář.
EEXIST _O_CREAT a _O_EXCL příznaky zadané, ale filename již existují.
EINVAL Neplatný oflag argument nebo pmode argument.
EMFILE Nejsou k dispozici žádné další popisovače souborů (je otevřeno příliš mnoho souborů).
ENOENT Soubor nebo cesta nebyla nalezena.

Další informace o těchto a dalších návratových kódech naleznete v tématu , , , a_sys_nerr . _sys_errlist_doserrnoerrno

Poznámky

Funkce _open otevře soubor určený filename a připraví ho na čtení nebo zápis, jak je určeno .oflag _wopenje verze širokého znaku _openfilename ; argument je _wopen řetězec širokého znaku. _wopen a _open chovat se stejně jinak.

Mapování rutin obecného textu

<tchar.h> rutina _UNICODE a _MBCS není definován _MBCS definovaný _UNICODE definovaný
_topen _open _open _wopen

oflag je celočíselná výraz tvořená jednou nebo více následujícími konstantami manifestu nebo kombinacemi konstant, které jsou definovány v <fcntl.h>.

oflag konstanta Chování
_O_APPEND Před každou operací zápisu přesune ukazatel na konec souboru.
_O_BINARY Otevře soubor v binárním (nepřeloženém) režimu. (Viz fopen popis binárního režimu.)
_O_CREAT Vytvoří soubor a otevře ho pro zápis. Nemá žádný vliv, pokud soubor určený filename existuje. Argument pmode je povinný, pokud _O_CREAT je zadán.
_O_CREAT | _O_SHORT_LIVED Vytvoří soubor jako dočasný a pokud je to možné, nevyprázdní se na disk. Argument pmode je povinný, pokud _O_CREAT je zadán.
_O_CREAT | _O_TEMPORARY Vytvoří soubor jako dočasný; soubor se odstraní při zavření posledního popisovače souboru. Argument pmode je povinný, pokud _O_CREAT je zadán. Aby se zachovalo starší chování kvůli kompatibilitě aplikací, nebrání ostatním procesům v odstranění tohoto souboru.
_O_CREAT | _O_EXCL Vrátí chybovou hodnotu, pokud soubor zadaný filename existuje. Platí pouze při použití s _O_CREAT.
_O_NOINHERIT Zabraňuje vytvoření sdíleného popisovače souboru.
_O_RANDOM Určuje, že ukládání do mezipaměti je optimalizované pro náhodný přístup z disku, ale není omezené na.
_O_RDONLY Otevře soubor jen pro čtení. Nelze zadat pomocí _O_RDWR nebo _O_WRONLY.
_O_RDWR Otevře soubor pro čtení i zápis. Nelze zadat pomocí _O_RDONLY nebo _O_WRONLY.
_O_SEQUENTIAL Určuje, že ukládání do mezipaměti je optimalizované pro sekvenční přístup z disku, ale není omezené na.
_O_TEXT Otevře soubor v textovém režimu ANSI (přeložený). (Další informace najdete v tématu Vstupně-výstupní a binární soubor textového a binárního režimu a fopen.)
_O_TRUNC Otevře soubor a zkrátí ho na nulovou délku; soubor musí mít oprávnění k zápisu. Nelze zadat pomocí parametru _O_RDONLY. _O_TRUNC použitý při _O_CREAT otevření existujícího souboru nebo vytvoření souboru. Poznámka: Příznak _O_TRUNC zničí obsah zadaného souboru.
_O_WRONLY Otevře soubor pouze pro zápis. Nelze zadat pomocí _O_RDONLY nebo _O_RDWR.
_O_U16TEXT Otevře soubor v režimu Unicode UTF-16.
_O_U8TEXT Otevře soubor v režimu Unicode UTF-8.
_O_WTEXT Otevře soubor v režimu Unicode.

Chcete-li určit režim přístupu k souboru, je nutné zadat _O_RDONLYbuď , _O_RDWRnebo _O_WRONLY. Pro režim přístupu neexistuje žádná výchozí hodnota.

Pokud _O_WTEXT se používá k otevření souboru pro čtení, _open přečte začátek souboru a zkontroluje značku pořadí bajtů (BOM). Pokud existuje bom, soubor se v závislosti na kusovníku považuje za UTF-8 nebo UTF-16LE. Pokud není k dispozici žádný kusovník, soubor se považuje za ANSI. Při otevření souboru pro zápis pomocí _O_WTEXT, používá se UTF-16. Bez ohledu na předchozí nastavení nebo značku _O_U8TEXT pořadí bajtů se soubor vždy otevře jako UTF-8. Pokud _O_U16TEXT se použije, soubor se vždy otevře jako UTF-16.

Když je soubor otevřen v režimu Unicode pomocí _O_WTEXT, _O_U8TEXTnebo _O_U16TEXT, vstupní funkce přeložit data načtená ze souboru do dat UTF-16 uložených jako typ wchar_t. Funkce, které zapisují do souboru otevřeného v režimu Unicode, očekávají vyrovnávací paměti obsahující data UTF-16 uložená jako typ wchar_t. Pokud je soubor kódovaný jako UTF-8, při zápisu se data UTF-16 přeloží do UTF-8. Obsah souboru s kódováním UTF-8 se při čtení přeloží do UTF-16. Pokus o čtení nebo zápis lichého počtu bajtů v režimu Unicode způsobí chybu ověření parametru. Pokud chcete číst nebo zapisovat data uložená v programu jako UTF-8, použijte místo režimu Unicode textový nebo binární soubor. Zodpovídáte za jakýkoli požadovaný překlad kódování.

Pokud _open je volána pomocí _O_WRONLY | _O_APPEND (režim připojení) a _O_WTEXT, _O_U16TEXTnebo , se _O_U8TEXTnejprve pokusí otevřít soubor pro čtení a zápis, přečtěte si kusovník a znovu ho otevřete pouze pro zápis. Pokud se otevření souboru pro čtení a zápis nezdaří, otevře soubor pouze pro zápis a použije výchozí hodnotu pro nastavení režimu Unicode.

Při použití dvou nebo více konstant manifestu k vytvoření argumentu oflag jsou konstanty kombinovány s bitovým operátorem OR ( | ). Diskuzi o binárních a textových režimech najdete v tématu Vstupně-výstupní operace souboru textového a binárního režimu.

Argument pmode je povinný pouze v případě, že _O_CREAT je zadán. Pokud soubor již existuje, pmode bude ignorován. pmode V opačném případě určuje nastavení oprávnění k souboru, které se nastaví při prvním zavření nového souboru. _open použije aktuální masku oprávnění k souboru před pmode nastavením oprávnění. (Další informace najdete v tématu _umask.) pmode je celočíselná výraz, který obsahuje jednu nebo obě následující konstanty manifestu, které jsou definovány v <sys\stat.h>.

pmode Význam
_S_IREAD Je povoleno pouze čtení.
_S_IWRITE Zápis je povolený. (Ve skutečnosti povoluje čtení a zápis.)
_S_IREAD | _S_IWRITE Čtení a psaní je povoleno.

Když jsou obě konstanty zadané, spojí se s bitovým operátorem OR ( | ). Ve Windows jsou všechny soubory čitelné; Oprávnění jen pro zápis není k dispozici. Proto jsou režimy _S_IWRITE a _S_IREAD | _S_IWRITE jsou ekvivalentní.

Pokud je zadaná jiná hodnota než nějaká kombinace _S_IREAD a _S_IWRITE je zadána pro pmode( i když by byla zadána platná pmode v jiném operačním systému) nebo pokud je zadána jakákoli jiná hodnota než povolené oflag hodnoty, funkce vygeneruje kontrolní výraz v režimu ladění a vyvolá neplatnou obslužnou rutinu parametru, jak je popsáno v ověření parametru. Pokud je spuštění povoleno pokračovat, vrátí funkce hodnotu -1 a nastaví errno hodnotu EINVAL.

Požadavky

Function Požadovaný hlavičkový soubor Volitelné záhlaví
_open <io.h> <fcntl.h>, , <sys\types.h><sys\stat.h>
_wopen <io.h> nebo <wchar.h> <fcntl.h>, , <sys\types.h><sys\stat.h>

_open a _wopen jedná se o rozšíření Microsoftu. Další informace o kompatibilitě najdete v tématu Kompatibilita.

Knihovny

Všechny verze knihoven runtime jazyka C.

Příklad

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

Výstup

Open succeeded on input file
Open succeeded on output file

Viz také

Vstupně-výstupní operace nízké úrovně
_chmod, _wchmod
_close
_creat, _wcreat
_dup, _dup2
fopen, _wfopen
_sopen, _wsopen