_sopen_s
, _wsopen_s
Otwiera plik do udostępniania. Te wersje i _sopen
_wsopen
mają 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 oflag argument , shflag lub pmode pfh 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_errlist
i _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 oflag
shflag
. _wsopen_s
jest wersją szerokoznakową ; _sopen_s
argument 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 rutyna |
_UNICODE i _MBCS niezdefiniowane |
_MBCS zdefiniowany |
_UNICODE zdefiniowany |
---|---|---|---|
_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ł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.
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 _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ły |
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_CREAT
parametru , 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