Udostępnij za pośrednictwem


_open, _wopen

Otwiera plik.Te funkcje są przestarzałe ponieważ zabezpieczyć inne wersje są dostępne; zobacz _sopen_s, _wsopen_s.

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

Parametry

  • filename
    Nazwa pliku.

  • oflag
    Rodzaj operacji dozwolone.

  • pmode
    Tryb uprawnień.

Wartość zwracana

Każda z tych funkcji zwraca deskryptor pliku otwartego pliku.Wartość zwracaną wartość -1 oznacza błąd; w takim przypadku errno jest ustawiona na jedną z następujących wartości.

  • EACCES
    Nastąpiła próba otwarcia pliku tylko do odczytu dla zapisu pliku wymiany tryb nie zezwala na określonej operacji lub podana ścieżka jest katalogiem.

  • EEXIST
    _O_CREAT i _O_EXCL flagi określony, ale filename już istnieje.

  • EINVAL
    Nieprawidłowy oflag lub pmode argumentu.

  • EMFILE
    Nie więcej deskryptorów plików są dostępne (zbyt wiele plików jest już otwartych).

  • ENOENT
    Plik lub nie można odnaleźć ścieżki.

Aby uzyskać więcej informacji na temat tych i innych kody powrotne, zobacz errno, _doserrno, _sys_errlist, and _sys_nerr.

Uwagi

_open Funkcji otwiera plik określony przez filename i przygotowuje go do odczytu z lub zapisu, określony przez oflag._wopen to wersja całego znaku _open; filename argument _wopen jest ciągiem znaków sieci._wopen i _open działa tak samo, w przeciwnym razie.

Mapowania procedur zwykłego tekstu

Procedury Tchar.h

_UNICODE i _MBCS niezdefiniowane

_MBCS zdefiniowano

_UNICODE zdefiniowano

_topen

_open

_open

_wopen

oflag Wyrażenie liczby całkowitej powstaje z co najmniej jedną z następujących stałych manifestu lub kombinacji stałych, które są definiowane w < fcntl.h >.

  • _O_APPEND
    Przesunie wskaźnik pliku na końcu pliku przed każdej operacji zapisu.

  • _O_BINARY
    Otwiera plik w trybie binarnym (niezrozumiały).(Zobacz fopen opis binarnym.)

  • _O_CREAT
    Tworzy plik i otwiera go do zapisu.Ustawienie nie działa, jeśli plik określony przez filename istnieje.pmode Argument jest wymagany, gdy _O_CREAT jest określony.

  • _O_CREAT | _O_SHORT_LIVED
    Tworzy plik jako tymczasowe i jeśli jest to możliwe nie opróżnia na dysk.pmode Argument jest wymagany, gdy _O_CREAT jest określony.

  • _O_CREAT | _O_TEMPORARY
    Tworzy plik jako tymczasowe; plik zostanie usunięty po zamknięciu ostatnich deskryptor pliku.pmode Argument jest wymagany, gdy _O_CREAT jest określony.

  • _O_CREAT | _O_EXCL
    Zwraca wartość błędu, jeśli plik określony przez filename istnieje.Ma zastosowanie tylko w przypadku użycia z _O_CREAT.

  • _O_NOINHERIT
    Uniemożliwia tworzenie deskryptor udostępniony plik.

  • _O_RANDOM
    Określa, że buforowanie jest zoptymalizowana pod kątem, ale nie ograniczone do RAM z dysku.

  • _O_RDONLY
    Otwiera plik tylko odczytywania.Nie można określić z _O_RDWR lub _O_WRONLY.

  • _O_RDWR
    Otwiera plik zarówno odczytu i zapisu.Nie można określić z _O_RDONLY lub _O_WRONLY.

  • _O_SEQUENTIAL
    Określa, że buforowanie jest zoptymalizowana pod kątem, ale nie ograniczone do kolejnych dostęp z dysku.

  • _O_TEXT
    Otwiera plik w trybie tekstowym (translacji).(Aby uzyskać więcej informacji, zobacz tekstu i binarny tryb operacji We/Wy i fopen.)

  • _O_TRUNC
    Otwiera plik i obcina go do zera długości; Plik musi mieć uprawnienia do zapisu.Nie można określić z _O_RDONLY._O_TRUNC używane z _O_CREAT Otwiera istniejący plik lub tworzy plik.

    [!UWAGA]

    _O_TRUNC Flaga zniszczy zawartość określonego pliku.

  • _O_WRONLY
    Otwiera plik do zapisywania tylko.Nie można określić z _O_RDONLY lub _O_RDWR.

  • _O_U16TEXT
    Otwiera plik w trybie Unicode UTF-16.

  • _O_U8TEXT
    Otwiera plik w trybie Unicode UTF-8.

  • _O_WTEXT
    Otwiera plik w trybie Unicode.

Aby określić tryb dostępu do pliku, należy określić albo _O_RDONLY, _O_RDWR, lub _O_WRONLY.Nie istnieje wartość domyślną dla trybu dostępu.

Jeśli _O_WTEXT jest używany do otwierania pliku do odczytu, _open odczytuje na początku pliku i sprawdza, czy znak porządku bajtów (BOM).W przypadku BOM, plik jest traktowany jako UTF-8 lub UTF-16LE, w zależności od BOM.Jeśli występuje żaden BOM, plik jest traktowany jako ANSI.Jeśli plik jest otwarty do zapisu przy użyciu _O_WTEXT, UTF-16 jest używany.Bez względu na to wszelkich poprzednie ustawienie lub bajtów znacznik kolejności, jeśli _O_U8TEXT jest używany, plik jest zawsze otwarty jako UTF-8, gdy _O_U16TEXT jest używany, jest zawsze otworzyć pliku jako UTF-16.

Jeśli plik jest otwarty w trybie Unicode za pomocą _O_WTEXT, _O_U8TEXT, lub _O_U16TEXT, input funkcji tłumaczenia danych, który jest odczytywany z pliku na UTF-16 dane przechowywane jako typ wchar_t.Funkcje, które zapisu w pliku otworzyć w trybie Unicode oczekuje buforów, które zawierają dane UTF-16 przechowywane jako typ wchar_t.Jeśli plik jest zakodowane jako UTF-8, UTF-16 danych jest przetłumaczyć na UTF-8, gdy jest ona zapisywana i zawartości algorytmem UTF-8 jest przetłumaczyć UTF-16 została przeczytana.Podjęto próbę odczytu lub zapisu nieparzysta liczba bajtów w trybie Unicode powoduje błąd sprawdzania poprawności parametru.Do odczytu lub zapisu danych przechowywanych w swoim programie jako UTF-8, zamiast tekstowe lub binarne tryb pliku trybu Unicode.Użytkownik jest odpowiedzialny za wszelkie wymagane tłumaczenia kodowania.

Jeśli _open jest wywoływana z _O_WRONLY|_O_APPEND (Dołącz tryb) i _O_WTEXT, _O_U16TEXT, lub _O_U8TEXT, najpierw próbuje otworzyć pliku do odczytu i zapisu, odczytać BOM, a następnie otwórz go ponownie w celu zapisywania tylko.W przypadku otwierania pliku do odczytu i zapisu nie powiodło się, otwiera plik do zapisywania tylko i jest używana wartość domyślna dla ustawienia trybu Unicode.

Jeśli co najmniej dwa stałe manifestu służą do formularza oflag argument, stałe są łączone z (operator bitowe lub|).Omówienie trybów binarnych i tekst, zobacz tekstu i we/wy binarny tryb pliku.

pmode Argument jest wymagany tylko wtedy, gdy _O_CREAT jest określony.Jeśli plik już istnieje, pmode jest ignorowana.W przeciwnym razie pmode Określa ustawienia uprawnień plików, które są ustawiane podczas nowy plik musi być zamknięty po raz pierwszy._open stosuje bieżącą maskę uprawnień pliku do pmode przed uprawnienia zostały ustawione.(Aby uzyskać więcej informacji, zobacz _umask.) pmode jest wyrażenie liczby całkowitej, która zawiera co najmniej jedną z następujących stałych manifestu, które są definiowane w < sys\stat.h >.

  • _S_IREAD
    Odczytywanie tylko dozwolone.

  • _S_IWRITE
    Zapisywanie dozwolone.(W efekcie umożliwia odczyt i zapis.)

  • _S_IREAD | _S_IWRITE
    Dozwolone odczytu i zapisu.

Jeśli podana jest zarówno stałych, są łączone z (operator bitowe lub|).W systemie Windows wszystkie pliki były czytelne; nie ma uprawnienia tylko do zapisu.W związku z tym, tryby _S_IWRITE i _S_IREAD  | _S_IWRITE są równoważne.

Jeśli wartości innej niż dowolną kombinację _S_IREAD i _S_IWRITE jest określone dla pmode— nawet, jeśli chcesz określić prawidłowy pmode w innym systemie operacyjnym — lub jeśli wszystkie wartości inne niż dozwolone oflag określone wartości funkcji generuje assertion w trybie debugowania i wywołuje program obsługi nieprawidłowy parametr zgodnie z opisem w Sprawdzanie poprawności parametru.Jeśli jest dozwolone wykonywanie, aby kontynuować, funkcja zwraca wartość -1 i zestawy errno do EINVAL.

Wymagania

Procedura

Wymagany nagłówek

Opcjonalne nagłówka

_open

< io.h >

< fcntl.h >, < sys\types.h >, < sys\stat.h >

_wopen

< io.h > lub < wchar.h >

< fcntl.h >, < sys\types.h >, < sys\stat.h >

_open i _wopen są rozszerzenia firmy Microsoft.Aby uzyskać więcej informacji o zgodności, zobacz Zgodność.

Biblioteki

Wszystkie wersje C biblioteki czasu wykonywania.

Przykład

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

Dane wyjściowe

Open succeeded on input file
Open succeeded on output file

Odpowiednik w programie .NET Framework

Zobacz też

Informacje

We/Wy niskiego poziomu

_chmod, _wchmod

_close

_creat, _wcreat

_dup, _dup2

fopen, _wfopen

_sopen, _wsopen