Dela via


_open, _wopen

Ö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