_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
_doserrno
errno
Poznámky
Funkce _open
otevře soubor určený filename
a připraví ho na čtení nebo zápis, jak je určeno .oflag
_wopen
je verze širokého znaku _open
filename
; 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_RDONLY
buď , _O_RDWR
nebo _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_U8TEXT
nebo _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_U16TEXT
nebo , se _O_U8TEXT
nejprve 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