Udostępnij przez


_sopen, _wsopen

Otwiera plik do udostępniania. Dostępne są bardziej bezpieczne wersje tych funkcji: zobacz _sopen_s, _wsopen_s.

Składnia

int _sopen(
   const char *filename,
   int oflag,
   int shflag [,
   int pmode ]
);
int _wsopen(
   const wchar_t *filename,
   int oflag,
   int shflag [,
   int pmode ]
);

Parametry

filename
Nazwa pliku.

oflag
Dozwolony rodzaj operacji.

shflag
Rodzaj udostępniania jest dozwolony.

pmode
Ustawienie uprawnień.

Wartość zwracana

Każda z tych funkcji zwraca deskryptor plików dla otwartego pliku.

Jeśli filename lub oflag jest wskaźnikiem NULL lub jeśli oflag lub shflag nie znajduje się w prawidłowym zakresie wartości, wywoływana jest nieprawidłowa procedura obsługi parametrów, zgodnie z opisem w temacie Walidacja parametru. Jeśli wykonanie może kontynuować, te funkcje zwracają wartość -1 i ustawiają errno jedną z następujących wartości.

errno Wartość Stan
EACCES Podana ścieżka jest katalogiem lub plik jest tylko do odczytu, ale podjęto próbę operacji otwierania do zapisu.
EEXIST _O_CREAT i _O_EXCL określono flagi, ale filename już istnieje.
EINVAL Nieprawidłowy oflag lub shflag argument.
EMFILE Nie są dostępne deskryptory plików.
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_errlisti _sys_nerr.

Uwagi

Funkcja _sopen otwiera plik określony przez filename program i przygotowuje plik do wspólnego odczytu lub zapisu, zgodnie z definicją i oflagshflag. _wsopen jest wersją szerokoznakową ; _sopenargument to filename_wsopen ciąg o szerokim znaku. _wsopen i _sopen zachowywać się identycznie inaczej.

Domyślnie stan globalny tej funkcji jest zakresem aplikacji. Aby go zmienić, zobacz Stan globalny w CRT.

Mapowania procedur tekstu ogólnego

Tchar.h Rutynowych _UNICODE i _MBCS niezdefiniowane _MBCS Zdefiniowane _UNICODE Zdefiniowane
_tsopen _sopen _sopen _wsopen

Wyrażenie oflag liczby całkowitej jest tworzone przez połączenie co najmniej jednej z następujących stałych manifestu, które są zdefiniowane w pliku <fcntl.h>. Gdy co najmniej dwie stałe tworzą argument oflag, są one łączone z operatorem bitowym OR ( | ).

oflag Stała 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_RDWRlub _O_WRONLY. Nie ma wartości domyślnej dla trybu dostępu.

Gdy plik jest otwierany w trybie Unicode przy użyciu _O_WTEXTfunkcji wejściowych , _O_U8TEXTlub _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ą buforów 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 _sopen 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.

Argument shflag jest wyrażeniem stałym składającym się z jednej z następujących stałych manifestu, które są zdefiniowane w pliku <share.h>.

shflag Stała Zachowanie
_SH_DENYRW Odmawia dostępu do odczytu i zapisu do pliku.
_SH_DENYWR Odmawia dostępu do zapisu do pliku.
_SH_DENYRD Odmawia dostępu do odczytu do pliku.
_SH_DENYNO Zezwala na dostęp do odczytu i zapisu.

pmode Argument jest wymagany tylko wtedy, gdy _O_CREAT jest określony. Jeśli plik nie istnieje, pmode określa ustawienia uprawnień pliku, które są ustawiane po pierwszym zamknięciu nowego pliku. pmode W przeciwnym razie jest ignorowany. pmode to wyrażenie całkowite, które zawiera jedną lub obie stałe manifestu _S_IWRITE i _S_IREAD, które są zdefiniowane w elemecie <sys\stat.h>. Po podaniu obu stałych są one łączone z operatorem bitowym OR. Znaczenie pmode jest następujące.

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.

Jeśli nie podano uprawnień do zapisu, plik jest tylko do odczytu. W systemie operacyjnym Windows wszystkie pliki są czytelne; Nie można nadać uprawnień tylko do zapisu. W związku z tym tryby _S_IWRITE i _S_IREAD | _S_IWRITE są równoważne.

_sopen stosuje bieżącą maskę uprawnień do pliku przed pmode ustawieniem uprawnień. Aby uzyskać więcej informacji, zobacz _umask.

Wymagania

Function Wymagany nagłówek Opcjonalny nagłówek
_sopen <io.h> <fcntl.h>, , <sys\types.h>, , <sys\stat.h><share.h>
_wsopen <io.h> lub <wchar.h> <fcntl.h>, , <sys\types.h>, , <sys\stat.h><share.h>

Aby uzyskać więcej informacji o zgodności, zobacz Zgodność.

Przykład

Zobacz przykład dla elementu _locking.

Zobacz też

We/Wy niskiego poziomu
_close
_creat, _wcreat
fopen, _wfopen
_fsopen, _wfsopen
_open, _wopen