Sdílet prostřednictvím


_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_doserrnoerrno

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, fseeknebo 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 najdete FILE_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 zkombinovat TD .

_fsopen a _wfsopen jedná se o varianty fopenspecifické 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