Sdílet prostřednictvím


_fdopen, _wfdopen

Přidruží stream k souboru, který byl dříve otevřen pro vstupně-výstupní operace nízké úrovně.

Syntaxe

FILE *_fdopen(
   int fd,
   const char *mode
);
FILE *_wfdopen(
   int fd,
   const wchar_t *mode
);

Parametry

fd
Popisovač souboru otevřeného souboru

mode
Typ přístupu k souborům.

Vrácená hodnota

Každá z těchto funkcí vrátí ukazatel na otevřený datový proud. Hodnota ukazatele null označuje chybu. Pokud dojde k chybě, vyvolá se neplatná obslužná rutina parametru, jak je popsáno v ověření parametru. Pokud je spuštění povoleno pokračovat, errno je nastaven buď na EBADF, který označuje chybný popisovač souboru, nebo EINVAL, který označuje, že mode byl ukazatel null.

Další informace o těchto a dalších kódech chyb naleznete v tématu , , , a_sys_nerr . _sys_errlist_doserrnoerrno

Poznámky

Funkce _fdopen přidruží vstupně-výstupní datový proud k souboru, který je identifikovaný fd, a umožňuje tak soubor, který je otevřen pro ukládání do vyrovnávací paměti a formátování vstupně-výstupních operací nízké úrovně. _wfdopenje verze širokého znaku _fdopenmode ; argument je _wfdopen řetězec širokého znaku. _wfdopen a _fdopen jinak se chovají stejně.

Vrácený FILE * datový proud vlastní popisovače _fdopen souborů. Pokud _fdopen je úspěšný, nezavolejte _close popisovač souboru. Volání fclose vráceného FILE * kódu také zavře popisovač souboru.

Ve výchozím nastavení je globální stav této funkce vymezen na aplikaci. Pokud ho chcete změnit, přečtěte si téma Globální stav v CRT.

Řetězec mode znaků určuje typ přístupu k souboru požadovanému pro soubor:

mode Access
"r" Otevře se pro čtení. Pokud soubor neexistuje nebo ho nejde najít, fopen 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, 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 soubor existuje, jeho obsah se zničí.
"a+" Otevře se pro čtení a připojení. Vytvoří soubor, pokud neexistuje.

Když se soubor otevře s typem "a" přístupu nebo "a+" s typem přístupu, dojde na konci souboru ke všem operacím zápisu. 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 "r+"zadán typ přístupu , "w+"nebo "a+" čtení i zápis jsou povoleny (soubor je otevřen pro "aktualizaci"). Při přepínání mezi čtením a zápisem však musí existovat intervening fflush, fsetpos, , fseeknebo rewind operace. Pokud chcete, můžete určit aktuální pozici operacefsetpos.fseek

Kromě výše uvedených hodnot mohou být do režimu překladu pro znaky nového řádku zahrnuty mode také následující znaky:

mode modifikátor Chování
t Otevřete 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 na výstupu. Ctrl+Z je také interpretován jako znak konce souboru při vstupu.
b Otevřete v binárním (nepřekláněném) režimu. Všechny překlady z t režimu jsou potlačeny.
c Povolte příznak potvrzení pro přidruženou filename , aby obsah vyrovnávací paměti souboru byl zapsán přímo na disk, pokud je fflush volána nebo _flushall je volána.
n Resetujte příznak potvrzení přidruženého filename k "no-commit". Tento příznak je výchozí. Přepíše také příznak globálního potvrzení, pokud propojujete program s Commode.obj. Výchozí příznak globálního potvrzení je "no-commit", pokud explicitně propojit program s Commode.obj.

, tca n mode možnosti jsou rozšíření společnosti Microsoft pro fopen a _fdopen. Nepoužívejte je, pokud chcete zachovat přenositelnost ANSI.

Pokud t nebo b není uveden v mode, je výchozí režim překladu definován globální proměnnou _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.

Platné znaky pro mode řetězec použitý v fopen a _fdopen odpovídají argumentům použitým oflag v _open a _sopen, jak je znázorněno v této tabulce:

Znaky v mode řetězci Ekvivalentní oflag hodnota pro _open a _sopen
a _O_WRONLY | _O_APPEND (obvykle _O_WRONLY | _O_CREAT | _O_APPEND)
a+ _O_RDWR | _O_APPEND (obvykle _O_RDWR | _O_APPEND | _O_CREAT)
r _O_RDONLY
r+ _O_RDWR
w _O_WRONLY (obvykle _O_WRONLY | _O_CREAT | _O_TRUNC)
w+ _O_RDWR (obvykle _O_RDWR | _O_CREAT | _O_TRUNC)
b _O_BINARY
t _O_TEXT
c Nic
n Nic

Požadavky

Function Požadovaný hlavičkový soubor Hlavička jazyka C++
_fdopen <stdio.h> <cstdio>
_wfdopen <stdio.h> nebo <wchar.h> <cstdio>

Další informace o dodržování standardů a zásadách vytváření názvů v knihovně modulu runtime jazyka C naleznete v tématu Kompatibilita.

Mapování rutin obecného textu

<tchar.h> rutina _UNICODE a _MBCS není definován _MBCS definovaný _UNICODE definovaný
_tfdopen _fdopen _fdopen _wfdopen

Příklad

// crt_fdopen.c
// This program opens a file by using low-level
// I/O, then uses _fdopen to switch to stream
// access. It counts the lines in the file.

#include <stdlib.h>
#include <stdio.h>
#include <fcntl.h>
#include <io.h>
#include <share.h>

int main( void )
{
   FILE *stream;
   int  fd, count = 0;
   char inbuf[128];

   // Open a file.
   if( _sopen_s( &fd, "crt_fdopen.txt", _O_RDONLY, _SH_DENYNO, 0 ) )
      exit( 1 );

   // Get stream from file descriptor.
   if( (stream = _fdopen( fd, "r" )) == NULL )
      exit( 1 );

   while( fgets( inbuf, 128, stream ) != NULL )
      count++;

   // After _fdopen, close by using fclose, not _close.
   fclose( stream );
   printf( "Lines in file: %d\n", count );
}

Vstup: crt_fdopen.txt

Line one
Line two

Výstup

Lines in file: 2

Viz také

Vstupně-výstupní operace streamu
_dup, _dup2
fclose, _fcloseall
fopen, _wfopen
freopen, _wfreopen
_open, _wopen