Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Öppnar en fil. Dessa funktioner är inaktuella eftersom säkrare versioner är tillgängliga. se _sopen_s, _wsopen_s.
Syntax
int _open(
const char *filename,
int oflag [,
int pmode]
);
int _wopen(
const wchar_t *filename,
int oflag [,
int pmode]
);
Parameterar
filename
Filnamn.
oflag
Den typ av åtgärder som tillåts.
pmode
Behörighetsläge.
Returvärde
Var och en av dessa funktioner returnerar en filbeskrivning för den öppnade filen. Ett returvärde för -1 anger ett fel. i så fall errno anges till något av följande värden.
errno värde |
Tillstånd |
|---|---|
EACCES |
Försökte öppna en skrivskyddad fil för skrivning, filens delningsläge tillåter inte de angivna åtgärderna eller så är den angivna sökvägen en katalog. |
EEXIST |
_O_CREAT och _O_EXCL flaggor har angetts, men filename finns redan. |
EINVAL |
Ogiltigt oflag eller pmode argument. |
EMFILE |
Inga fler filbeskrivningar är tillgängliga (för många filer är öppna). |
ENOENT |
Filen eller sökvägen hittades inte. |
Mer information om dessa och andra returkoder finns i errno, _doserrno, _sys_errlistoch _sys_nerr.
Anmärkningar
Funktionen _open öppnar filen som anges av filename och förbereder den för läsning eller skrivning, enligt vad som anges av oflag.
_wopen är en bred teckenversion av _open; filename argumentet till _wopen är en sträng med många tecken.
_wopen och _open beter sig identiskt annars.
Allmän textrutinmappning
<tchar.h> rutin |
_UNICODE och _MBCS inte definierat |
_MBCS definierad |
_UNICODE definierad |
|---|---|---|---|
_topen |
_open |
_open |
_wopen |
oflag är ett heltalsuttryck som bildas från en eller flera av följande manifestkonstanter eller konstanta kombinationer, som definieras i <fcntl.h>.
oflag konstant |
Beteende |
|---|---|
_O_APPEND |
Flyttar filpekaren till slutet av filen före varje skrivåtgärd. |
_O_BINARY |
Öppnar filen i binärt (oöversatt) läge. (Se fopen en beskrivning av binärt läge.) |
_O_CREAT |
Skapar en fil och öppnar den för skrivning. Har ingen effekt om filen som anges av filename finns. Argumentet pmode krävs när _O_CREAT anges. |
_O_CREAT | _O_SHORT_LIVED |
Skapar en fil som tillfällig och töms om möjligt inte till disk. Argumentet pmode krävs när _O_CREAT anges. |
_O_CREAT | _O_TEMPORARY |
Skapar en fil som tillfällig. filen tas bort när den sista filbeskrivningen stängs. Argumentet pmode krävs när _O_CREAT anges. För att bevara äldre beteende för appkompatibilitet hindras inte andra processer från att ta bort den här filen. |
_O_CREAT | _O_EXCL |
Returnerar ett felvärde om en fil som anges av filename finns. Gäller endast när det används med _O_CREAT. |
_O_NOINHERIT |
Förhindrar att en delad filbeskrivning skapas. |
_O_RANDOM |
Anger att cachelagring är optimerat för, men inte begränsat till, slumpmässig åtkomst från disk. |
_O_RDONLY |
Öppnar en fil för endast läsning. Det går inte att ange med _O_RDWR eller _O_WRONLY. |
_O_RDWR |
Öppnar en fil för både läsning och skrivning. Det går inte att ange med _O_RDONLY eller _O_WRONLY. |
_O_SEQUENTIAL |
Anger att cachelagring är optimerat för, men inte begränsat till, sekventiell åtkomst från disk. |
_O_TEXT |
Öppnar en fil i läget ANSI-text (översatt). Mer information finns i Text- och binärlägesfilen I/O och fopen. |
_O_TRUNC |
Öppnar en fil och trunkerar den till noll längd. filen måste ha skrivbehörighet. Det går inte att ange med _O_RDONLY.
_O_TRUNC används med _O_CREAT öppnar en befintlig fil eller skapar en fil.
Not: Flaggan _O_TRUNC förstör innehållet i den angivna filen. |
_O_WRONLY |
Öppnar en fil för endast skrivning. Det går inte att ange med _O_RDONLY eller _O_RDWR. |
_O_U16TEXT |
Öppnar en fil i Unicode UTF-16-läge. |
_O_U8TEXT |
Öppnar en fil i Unicode UTF-8-läge. |
_O_WTEXT |
Öppnar en fil i Unicode-läge. |
Om du vill ange filåtkomstläget måste du ange antingen _O_RDONLY, _O_RDWReller _O_WRONLY. Det finns inget standardvärde för åtkomstläget.
Om _O_WTEXT används för att öppna en fil för läsning _open läser du början av filen och söker efter ett byteordningsmärke (BOM). Om det finns en strukturlista behandlas filen som UTF-8 eller UTF-16LE, beroende på strukturlistan. Om det inte finns någon strukturlista behandlas filen som ANSI. När en fil öppnas för skrivning med hjälp _O_WTEXTav används UTF-16. Oavsett tidigare inställning eller byteordningsmärke, om _O_U8TEXT den används, öppnas filen alltid som UTF-8. Om _O_U16TEXT den används öppnas filen alltid som UTF-16.
När en fil öppnas i Unicode-läge med hjälp _O_WTEXTav indatafunktionerna , _O_U8TEXTeller _O_U16TEXTöversätter indata som läses från filen till UTF-16-data som lagras som typ wchar_t. Funktioner som skriver till en fil som öppnas i Unicode-läge förväntar sig buffertar som innehåller UTF-16-data som lagras som typ wchar_t. Om filen kodas som UTF-8 översätts UTF-16-data till UTF-8 när den skrivs. Filens UTF-8-kodade innehåll översätts till UTF-16 när den läses. Ett försök att läsa eller skriva ett udda antal byte i Unicode-läge orsakar ett parameterverifieringsfel. Om du vill läsa eller skriva data som lagras i programmet som UTF-8 använder du ett text- eller binärfilläge i stället för ett Unicode-läge. Du ansvarar för all nödvändig kodningsöversättning.
Om _open anropas med _O_WRONLY | _O_APPEND (tilläggsläge) och _O_WTEXT, _O_U16TEXTeller _O_U8TEXT, försöker den först öppna filen för att läsa och skriva, läsa bommen och sedan öppna den för endast skrivning. Om det inte går att öppna filen för läsning och skrivning öppnas filen endast för skrivning och använder standardvärdet för unicode-lägesinställningen.
När två eller flera manifestkonstanter används för att bilda oflag argumentet kombineras konstanterna med bitwise-OR-operatorn ( | ). En diskussion om binär- och textlägen finns i I/O för text- och binärlägesfil.
Argumentet pmode krävs endast när _O_CREAT anges. Om filen redan finns pmode ignoreras. I annat fall pmode anger du inställningarna för filbehörighet, som anges när den nya filen stängs första gången.
_open tillämpar den aktuella filbehörighetsmasken pmode på innan behörigheterna anges. Mer information finns i _umask.
pmode är ett heltalsuttryck som innehåller en eller båda av följande manifestkonstanter, som definieras i <sys\stat.h>.
pmode |
Innebörd |
|---|---|
_S_IREAD |
Endast läsning tillåten. |
_S_IWRITE |
Skrivning tillåts. (I praktiken tillåter läsning och skrivning.) |
_S_IREAD | _S_IWRITE |
Läsning och skrivning tillåts. |
När båda konstanterna anges kopplas de till bitwise-OR-operatorn ( | ). I Windows är alla filer läsbara. Skrivbehörighet är inte tillgänglig. Därför är lägena _S_IWRITE och _S_IREAD | _S_IWRITE likvärdiga.
Om ett annat värde än en kombination av _S_IREAD och _S_IWRITE har angetts för pmode– även om det skulle ange ett giltigt pmode i ett annat operativsystem – eller om något annat värde än de tillåtna oflag värdena anges, genererar funktionen en försäkran i felsökningsläge och anropar den ogiltiga parameterhanteraren enligt beskrivningen i Parameterverifiering. Om körningen tillåts fortsätta returnerar funktionen -1 och anger errno till EINVAL.
Kravspecifikation
| Funktion | Obligatoriskt huvud | Valfritt sidhuvud |
|---|---|---|
_open |
<io.h> |
<fcntl.h>, , <sys\types.h><sys\stat.h> |
_wopen |
<io.h> eller <wchar.h> |
<fcntl.h>, , <sys\types.h><sys\stat.h> |
_open och _wopen är Microsoft-tillägg. Mer kompatibilitetsinformation finns i Kompatibilitet.
Bibliotek
Alla versioner av C-körningsbibliotek.
Exempel
// 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 );
}
}
Utgång
Open succeeded on input file
Open succeeded on output file
Se även
Lågnivå-I/O
_chmod, _wchmod
_close
_creat, _wcreat
_dup, _dup2
fopen, _wfopen
_sopen, _wsopen