_open
, _wopen
Otwiera plik. Te funkcje są przestarzałe, ponieważ są dostępne bardziej bezpieczne wersje; zobacz _sopen_s
, _wsopen_s
.
Składnia
int _open(
const char *filename,
int oflag [,
int pmode]
);
int _wopen(
const wchar_t *filename,
int oflag [,
int pmode]
);
Parametry
filename
Nazwa pliku.
oflag
Dozwolony rodzaj operacji.
pmode
Tryb uprawnień.
Wartość zwracana
Każda z tych funkcji zwraca deskryptor plików dla otwartego pliku. Zwracana wartość -1 wskazuje błąd; w takim przypadku errno
jest ustawiona na jedną z następujących wartości.
errno wartość |
Stan |
---|---|
EACCES |
Podjęto próbę otwarcia pliku tylko do odczytu do zapisu, tryb udostępniania pliku nie zezwala na określone operacje lub dana ścieżka jest katalogiem. |
EEXIST |
_O_CREAT i _O_EXCL określone flagi, ale filename już istnieje. |
EINVAL |
Nieprawidłowy oflag lub pmode argument. |
EMFILE |
Nie są dostępne żadne deskryptory plików (zbyt wiele plików jest otwartych). |
ENOENT |
Nie można odnaleźć pliku lub ścieżki. |
Aby uzyskać więcej informacji na temat tych i innych kodów powrotnych, zobacz errno
, _doserrno
, _sys_errlist
i _sys_nerr
.
Uwagi
Funkcja _open
otwiera plik określony przez filename
i przygotowuje go do odczytu lub zapisu, jak określono w oflag
pliku . _wopen
jest wersją szerokoznakową ; _open
argument to filename
_wopen
ciąg o szerokim znaku. _wopen
i _open
zachowywać się identycznie inaczej.
Mapowania procedur tekstu ogólnego
<tchar.h> rutyna |
_UNICODE i _MBCS niezdefiniowane |
_MBCS zdefiniowany |
_UNICODE zdefiniowany |
---|---|---|---|
_topen |
_open |
_open |
_wopen |
oflag
to wyrażenie całkowite utworzone na podstawie co najmniej jednej z następujących stałych manifestu lub kombinacji stałych, które są zdefiniowane w elemecie <fcntl.h>
.
oflag stały |
Zachowanie |
---|---|
_O_APPEND |
Przenosi wskaźnik pliku na koniec pliku przed każdą operacją zapisu. |
_O_BINARY |
Otwiera plik w trybie binarnym (nieprzetłumaczonym). (Zobacz fopen opis trybu binarnego). |
_O_CREAT |
Tworzy plik i otwiera go do zapisu. Nie ma wpływu, jeśli plik określony przez filename istnieje. Argument pmode jest wymagany, gdy _O_CREAT jest określony. |
_O_CREAT | _O_SHORT_LIVED |
Tworzy plik jako tymczasowy, a jeśli to możliwe, nie jest opróżniany na dysk. Argument pmode jest wymagany, gdy _O_CREAT jest określony. |
_O_CREAT | _O_TEMPORARY |
Tworzy plik jako tymczasowy; plik jest usuwany po zamknięciu ostatniego deskryptora plików. Argument pmode jest wymagany, gdy _O_CREAT jest określony. Aby zachować starsze zachowanie w celu zachowania zgodności aplikacji, inne procesy nie mogą usuwać tego pliku. |
_O_CREAT | _O_EXCL |
Zwraca wartość błędu, jeśli plik określony przez filename istnieje. Stosuje się tylko wtedy, gdy jest używany z _O_CREAT . |
_O_NOINHERIT |
Zapobiega tworzeniu deskryptora udostępnionego pliku. |
_O_RANDOM |
Określa, że buforowanie jest zoptymalizowane pod kątem, ale nie ogranicza się do losowego dostępu z dysku. |
_O_RDONLY |
Otwiera plik tylko do odczytu. Nie można określić za pomocą _O_RDWR polecenia lub _O_WRONLY . |
_O_RDWR |
Otwiera plik do odczytu i zapisu. Nie można określić za pomocą _O_RDONLY polecenia lub _O_WRONLY . |
_O_SEQUENTIAL |
Określa, że buforowanie jest zoptymalizowane pod kątem, ale nie ogranicza się do sekwencyjnego dostępu z dysku. |
_O_TEXT |
Otwiera plik w trybie tekstowym ANSI (przetłumaczonym). (Aby uzyskać więcej informacji, zobacz Pliki we/ wy i pliki trybu binarnego i tekstowego oraz fopen .) |
_O_TRUNC |
Otwiera plik i obcina go do zerowej długości; plik musi mieć uprawnienia do zapisu. Nie można określić za pomocą polecenia _O_RDONLY . _O_TRUNC używany z _O_CREAT otwiera istniejący plik lub tworzy plik. Uwaga: flaga _O_TRUNC niszczy zawartość określonego pliku. |
_O_WRONLY |
Otwiera plik do zapisywania tylko. Nie można określić za pomocą _O_RDONLY polecenia 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ć wartość _O_RDONLY
, _O_RDWR
lub _O_WRONLY
. Nie ma wartości domyślnej dla trybu dostępu.
Jeśli _O_WTEXT
jest używany do otwierania pliku do odczytu, _open
odczytuje początek pliku i sprawdza, czy nie ma znaku kolejności bajtów (BOM). Jeśli istnieje model BOM, plik jest traktowany jako UTF-8 lub UTF-16LE, w zależności od modelu BOM. Jeśli nie ma modelu BOM, plik jest traktowany jako ANSI. Gdy plik jest otwierany do zapisywania przy użyciu programu _O_WTEXT
, jest używany protokół UTF-16. Niezależnie od poprzedniego ustawienia lub znacznika kolejności bajtów, jeśli _O_U8TEXT
jest używany, plik jest zawsze otwierany jako UTF-8. Jeśli _O_U16TEXT
jest używany, plik jest zawsze otwierany jako UTF-16.
Gdy plik jest otwierany w trybie Unicode przy użyciu _O_WTEXT
funkcji wejściowych , _O_U8TEXT
lub _O_U16TEXT
, tłumaczy dane odczytywane z pliku na dane UTF-16 przechowywane jako typ wchar_t
. Funkcje zapisu w pliku otwartym w trybie Unicode oczekują zawierających dane UTF-16 przechowywane jako typ wchar_t
. Jeśli plik jest zakodowany jako UTF-8, dane UTF-16 są tłumaczone na utF-8 podczas zapisywania. Zawartość zakodowana w formacie UTF-8 jest tłumaczona na kodOWANIE UTF-16 podczas jego odczytywania. Próba odczytania lub zapisania nieparzystej liczby bajtów w trybie Unicode powoduje błąd weryfikacji parametru. Aby odczytywać lub zapisywać dane przechowywane w programie jako UTF-8, użyj trybu pliku tekstowego lub binarnego zamiast trybu Unicode. Odpowiadasz za każde wymagane tłumaczenie kodowania.
Jeśli _open
jest wywoływany z _O_WRONLY | _O_APPEND
(tryb dołączania) i _O_WTEXT
_O_U16TEXT
, lub _O_U8TEXT
, najpierw próbuje otworzyć plik do odczytu i zapisu, przeczytaj BOM, a następnie otwórz go ponownie tylko do zapisu. Jeśli otwarcie pliku do odczytu i zapisu zakończy się niepowodzeniem, spowoduje to otwarcie pliku tylko do zapisu i użycie wartości domyślnej dla ustawienia trybu Unicode.
Gdy co najmniej dwie stałe manifestu są używane do tworzenia argumentu oflag
, stałe są łączone z operatorem bitowym OR ( |
). Aby zapoznać się z omówieniem trybów binarnych i tekstowych, zobacz We/Wy pliku w trybie tekstowym i binarnym.
pmode
Argument jest wymagany tylko wtedy, gdy _O_CREAT
jest określony. Jeśli plik już istnieje, pmode
zostanie zignorowany. pmode
W przeciwnym razie określa ustawienia uprawnień do pliku, które są ustawiane po pierwszym zamknięciu nowego pliku. _open
stosuje bieżącą maskę uprawnień do pliku przed pmode
ustawieniem uprawnień. (Aby uzyskać więcej informacji, zobacz _umask
.) pmode
to wyrażenie całkowite, które zawiera jedną lub obie następujące stałe manifestu, które są zdefiniowane w elemecie <sys\stat.h>
.
pmode |
Znaczenie |
---|---|
_S_IREAD |
Dozwolone jest tylko odczytywanie. |
_S_IWRITE |
Dozwolone pisanie. (W efekcie zezwala na odczytywanie i zapisywanie). |
_S_IREAD | _S_IWRITE |
Dozwolone jest odczytywanie i zapisywanie. |
Gdy obie stałe są podane, są one połączone z operatorem bitowym OR ( |
). W systemie Windows wszystkie pliki są czytelne; Uprawnienie tylko do zapisu nie jest dostępne. W związku z tym tryby _S_IWRITE
i _S_IREAD
| _S_IWRITE
są równoważne.
Jeśli określono wartość inną niż niektóre kombinacje _S_IREAD
i _S_IWRITE
jest określona dla pmode
— nawet jeśli określi prawidłową pmode
wartość w innym systemie operacyjnym lub jeśli określono dowolną wartość inną niż dozwolone oflag
wartości, funkcja generuje asercji w trybie debugowania i wywołuje nieprawidłową procedurę obsługi parametrów, zgodnie z opisem w temacie Walidacja parametrów. Jeśli wykonywanie jest dozwolone do kontynuowania, funkcja zwraca wartość -1 i ustawia wartość errno
EINVAL
.
Wymagania
Function | Wymagany nagłówek | Opcjonalny nagłówek |
---|---|---|
_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ą rozszerzeniami firmy Microsoft. Aby uzyskać więcej informacji o zgodności, zobacz Zgodność.
Biblioteki
Wszystkie wersje bibliotek czasu wykonywania języka C.
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 );
}
}
Wynik
Open succeeded on input file
Open succeeded on output file
Zobacz też
We/Wy niskiego poziomu
_chmod
, _wchmod
_close
_creat
, _wcreat
_dup
, _dup2
fopen
, _wfopen
_sopen
, _wsopen