_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