_fsopen
, _wfsopen
Otevře stream se sdílením souborů.
Syntaxe
FILE *_fsopen(
const char *filename,
const char *mode,
int shflag
);
FILE *_wfsopen(
const wchar_t *filename,
const wchar_t *mode,
int shflag
);
Parametry
filename
Název souboru, který se má otevřít.
mode
Typ povoleného přístupu.
shflag
Typ sdílení je povolený.
Vrácená hodnota
Každá z těchto funkcí vrátí ukazatel na datový proud. Hodnota ukazatele null označuje chybu. Pokud filename
nebo je nebo je NULL
prázdný mode
řetězec, tyto funkce vyvolat neplatnou obslužnou rutinu parametru, jak je popsáno v ověření parametru. Pokud provádění může pokračovat, tyto funkce se vrátí NULL
a nastaví errno
na EINVAL
.
Další informace o těchto a dalších kódech chyb naleznete v tématu , , , a_sys_nerr
. _sys_errlist
_doserrno
errno
Poznámky
Funkce _fsopen
otevře soubor určený filename
jako datový proud a připraví soubor pro následné sdílené čtení nebo zápis, jak je definován režimem a shflag
argumenty. _wfsopen
je verze širokého znaku _fsopen
; filename
a mode
argumenty, které mají _wfsopen
být řetězce širokého znaku. _wfsopen
a _fsopen
chovat se stejně jinak.
Řetězec mode
znaků určuje typ přístupu požadovaného pro soubor, jak je znázorněno v následující tabulce.
Pojem | definice |
---|---|
"r " |
Otevře se pro čtení. Pokud soubor neexistuje nebo ho nejde najít, _fsopen volání selže. |
"w " |
Otevře prázdný soubor pro zápis. Pokud daný soubor existuje, jeho obsah se zničí. |
"a " |
Otevře se pro zápis na konec souboru (připojování); vytvoří soubor jako první, pokud neexistuje. |
"r+ " |
Otevře se pro čtení i zápis. (Soubor musí existovat.) |
"w+ " |
Otevře prázdný soubor pro čtení i zápis. Pokud daný soubor existuje, jeho obsah se zničí. |
"a+ " |
Otevře se pro čtení a připojení; vytvoří soubor jako první, pokud neexistuje. |
Používejte typy "w
" a "w+
" opatrně, protože mohou zničit existující soubory.
Při otevření souboru s přístupovým typem "a
" nebo "a+
" dojde ke všem operacím zápisu na konci souboru. Ukazatel souboru lze přemístit pomocí fseek
nebo rewind
, ale před provedením jakékoli operace zápisu se vždy přesune zpět na konec souboru. Stávající data proto nelze přepsat. Je-li zadán typ přístupu "r+
", "w+
" nebo "a+
", je povoleno čtení i zápis (soubor je otevřen pro aktualizaci). Při přepínání mezi čtením a zápisem však musí existovat intervening fsetpos
, fseek
nebo rewind
operace. Aktuální pozici lze v případě potřeby zadat pro danou fsetpos
operaci fseek
. Kromě výše uvedených hodnot může být součástí jednoho z následujících znaků, který mode
určuje režim překladu pro nové řádky a pro správu souborů.
Pojem | definice |
---|---|
t |
Otevře soubor v textovém (přeloženém) režimu. V tomto režimu jsou kombinace návratového kanálu řádku (CR-LF) přeloženy do jednořádkových kanálů (LF) na vstupu a LF znaky jsou přeloženy na kombinace CR-LF ve výstupu. Příkaz CTRL+Z je na vstupu interpretován jako znak konce souboru. V souborech otevřených pro čtení nebo čtení/zápis _fsopen zkontroluje ctrl+Z na konci souboru a pokud je to možné, odebere ho. Odebere se, protože použití fseek a ftell přesunutí v souboru, který končí klávesou CTRL+Z, může způsobit fseek nesprávné chování blízko konce souboru. |
b |
Otevře soubor v binárním (nepřeložitném) režimu; výše uvedené překlady jsou potlačeny. |
D |
Určuje dočasný soubor, který se odstraní při zavření posledního ukazatele na soubor. |
R |
Určuje, že ukládání do mezipaměti je optimalizované pro náhodný přístup z disku, ale není omezené na. |
S |
Určuje, že ukládání do mezipaměti je optimalizované pro sekvenční přístup z disku, ale není omezené na. |
T |
Určuje soubor, který není zapsán na disk, pokud to nevyžaduje zatížení paměti. |
Pokud t
nebo b
není uveden v mode
, režim překladu je definován ve výchozím režimu proměnné _fmode
. Pokud t
nebo b
je předpona argumentu, funkce selže a vrátí .NULL
Informace o textovém a binárním režimu najdete v tématu Vstupně-výstupní operace souboru textového a binárního režimu.
Týkající se T
a D
:
T
zabraňuje zápisu souboru na disk, pokud ho zatížení paměti nevyžaduje. Další informace najdeteFILE_ATTRIBUTE_TEMPORARY
v konstantách atributu File a také tento blogový příspěvek Je pouze dočasný.D
určuje běžný soubor, který je zapsán na disk. Rozdíl je v tom, že se po zavření automaticky odstraní. Sémantiku můžete zkombinovatTD
.
_fsopen
a _wfsopen
jedná se o varianty fopen
specifické pro Microsoft . Nejsou součástí standardu ANSI. Pro přenosnější a bezpečnější funkci, pokud nepotřebujete sdílení souborů, zvažte _wfopen_s
nebo fopen_s
.
shflag
Argument je konstantní výraz, který se skládá z jedné z následujících konstant manifestu definovaných v Share.h
.
Pojem | definice |
---|---|
_SH_DENYNO |
Povoluje přístup pro čtení a zápis. |
_SH_DENYRD |
Odmítne přístup pro čtení k souboru. |
_SH_DENYRW |
Odepře přístup ke čtení a zápisu do souboru. |
_SH_DENYWR |
Odepře přístup k zápisu do souboru. |
Ve výchozím nastavení je globální stav této funkce vymezen na aplikaci. Chcete-li toto chování změnit, přečtěte si téma Globální stav v CRT.
Mapování rutin obecného textu
Tchar.h rutina |
_UNICODE a _MBCS není definován |
_MBCS definovaný |
_UNICODE definovaný |
---|---|---|---|
_tfsopen |
_fsopen |
_fsopen |
_wfsopen |
Požadavky
Function | Požadovaný hlavičkový soubor | Volitelná záhlaví |
---|---|---|
_fsopen |
<stdio.h> |
<share.h> Pro konstantu manifestu pro shflag parametr. |
_wfsopen |
<stdio.h> nebo <wchar.h> |
<share.h> Pro konstantu manifestu pro shflag parametr. |
Příklad
// crt_fsopen.c
#include <stdio.h>
#include <stdlib.h>
#include <share.h>
int main( void )
{
FILE *stream;
// Open output file for writing. Using _fsopen allows us to
// ensure that no one else writes to the file while we are
// writing to it.
//
if( (stream = _fsopen( "outfile", "wt", _SH_DENYWR )) != NULL )
{
fprintf( stream, "No one else in the network can write "
"to this file until we are done.\n" );
fclose( stream );
}
// Now others can write to the file while we read it.
system( "type outfile" );
}
No one else in the network can write to this file until we are done.
Viz také
Vstupně-výstupní operace streamu
fclose
, _fcloseall
_fdopen
, _wfdopen
ferror
_fileno
fopen
, _wfopen
freopen
, _wfreopen
_open
, _wopen
_setmode
_sopen
, _wsopen