Udostępnij za pośrednictwem


_sopen_s, _wsopen_s

Otwiera plik do udostępniania. Te wersje i _sopen_wsopenmają ulepszenia zabezpieczeń, zgodnie z opisem w temacie Funkcje zabezpieczeń w narzędziu CRT.

Składnia

errno_t _sopen_s(
   int* pfh,
   const char *filename,
   int oflag,
   int shflag,
   int pmode
);
errno_t _wsopen_s(
   int* pfh,
   const wchar_t *filename,
   int oflag,
   int shflag,
   int pmode,
);

Parametry

pfh
Dojście do pliku lub -1, jeśli wystąpi błąd.

filename
Nazwa pliku.

oflag
Dozwolony rodzaj operacji.

shflag
Rodzaj udostępniania jest dozwolony.

pmode
Ustawienie uprawnień.

Wartość zwracana

Wartość niezerowa wskazuje błąd; w takim przypadku errno jest ustawiona na 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 oflagargument , shflaglub pmodepfh lub filename był wskaźnikiem o wartości null.
EMFILE Brak dostępnych deskryptorów plików.
ENOENT Nie można odnaleźć pliku lub ścieżki.

Jeśli do funkcji zostanie przekazany nieprawidłowy argument, wywoływana jest nieprawidłowa procedura obsługi parametrów, zgodnie z opisem w temacie Weryfikacja parametrów. Jeśli wykonywanie jest dozwolone do kontynuowania, errno jest ustawione na EINVAL, i EINVAL jest zwracany.

Aby uzyskać więcej informacji na temat tych i innych kodów powrotnych, zobacz errno, _doserrno, _sys_errlisti _sys_nerr.

Jeśli wystąpi błąd, -1 jest zwracany za pośrednictwem pfh (chyba że pfh jest to wskaźnik o wartości null).

Uwagi

Funkcja _sopen_s otwiera plik określony przez filename program i przygotowuje plik do wspólnego odczytu lub zapisu, zgodnie z definicją i oflagshflag. _wsopen_s jest wersją szerokoznakową ; _sopen_sargument to filename_wsopen_s ciąg o szerokim znaku. _wsopen_s i _sopen_s 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_s _sopen_s _sopen_s _wsopen_s

Wyrażenie oflag liczby całkowitej jest tworzone przez połączenie co najmniej jednej stałej manifestu zdefiniowanej w elemecie <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_s 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, które składa 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 zawsze wymagany, w przeciwieństwie do elementu ._sopen Po określeniu _O_CREATparametru , 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_s stosuje bieżącą maskę uprawnień do pliku przed pmode ustawieniem uprawnień. (Zobacz _umask.)

Wymagania

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

_sopen_s i _wsopen_s są rozszerzeniami firmy Microsoft. 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