Sdílet prostřednictvím


_fdopen, _wfdopen

Přidruží soubor, která byla otevřena dříve nižší úrovně vstupně-výstupní datový proud.

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 souboru.

Vrácená hodnota

Každá z těchto funkcí vrací ukazatel na otevřený datový proud.Hodnota nulového ukazatele indikuje chybu.Dojde-li k chybě, vyvolán neplatný parametr obslužné rutiny, jak je popsáno v Ověření parametru.Pokud je povoleno zpracování pokračovat, errno nastavena buď na EBADF, který označuje popisovač chybný soubor nebo EINVAL, což označuje, že mode byl ukazatel s hodnotou null.

Další informace o těchto a dalších chybových kódech naleznete v části _doserrno, errno, _sys_errlist, and _sys_nerr.

Poznámky

_fdopen Funkce přidruží proud vstupně-výstupní soubor, který je identifikován fda tím umožňuje soubor, který je otevřen pro nižší úrovně vstupně-výstupní vyrovnávací paměti a formátován._wfdopen je širokoznaká verze _fdopen; argument mode pro _wfdopen je širokoznaký řetězec._wfdopena _fdopen jinak se chovají stejně.

Rutinní mapování obecného textu

Rutina Tchar.h

_UNICODE a _MBCS nejsou definovány

_MBCS definováno

_UNICODE definováno

_tfdopen

_fdopen

_fdopen

_wfdopen

mode Znakový řetězec Určuje typ souboru a přístup k souborům.

Řetězec znaků mode Určuje typ přístupu pro soubor, jak je znázorněno v následující tabulce.

  • "r"
    Otevře pro čtení.Pokud soubor neexistuje nebo nemůže být nalezen, volání fopen se nezdaří.

  • "w"
    Otevře prázdný soubor pro zápis.Pokud daný soubor existuje, jeho obsah je zničen.

  • "a"
    Otevře pro zápis na konci souboru (připojení).Pokud soubor neexistuje, vytvoří jej.

  • "r+"
    Otevře 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 je zničen.

  • "a+"
    Otevře pro čtení a připojení.Pokud soubor neexistuje, vytvoří jej.

Při otevření souboru s "a" nebo "a+" přístup k typu, všechny zápis operace dojít na konec souboru.Ukazatel souboru můžete přemístit pomocí fseek nebo rewind, ale je vždy přesunuta zpět na konec souboru před libovolný zápis operace provádí.Tudíž nemohou být žádná existující data přepsána.Pokud je zadán přístupový typ "r+", "w+" nebo "a+", je povoleno čtení i zápis (o souboru se říká, že je otevřen pro "úpravy").Však při přepínání mezi čtení a zápis, musí existovat podílející se fflush, fsetpos, fseek, nebo rewind operace.Můžete určit aktuální umístění fsetpos nebo fseek operaci, pokud chcete.

Kromě výše uvedených hodnot, mohou být zahrnuty následující znaky v mode Chcete-li určit režim překladu pro znaky nového řádku.

  • t
    Otevřít v textovém (přeloženém) režimu.V tomto režimu carriage return řádek krmiva (CR-LF) kombinace jsou přeloženy do kanálů jeden řádek (LF) na vstupu a LF znaky jsou převedeny na CR-LF kombinace na výstupu.Ctrl + Z, je interpretován jako znak konce souboru na vstupu.V souborech otevřen pro čtení nebo zápis fopen Ctrl + Z na konci souboru zjistí a odebere, pokud je to možné.Je důvodem, že použití fseek a ftell může způsobit, že funkce přesunutí v rámci souboru končí Ctrl + Z fseek k nesprávnému chování poblíž konce souboru.

  • b
    V binárním režimu (nepřeložený) otevřít.Překlady z t režimu jsou potlačeny.

  • c
    Pro přidružený filename povolte příznak pro zápis, aby byl obsah vyrovnávací paměti souboru zapsán přímo na disk při zavolání fflush nebo _flushall.

  • n
    Resetovat parametr pro zápis pro přidružený filename na "neukládat". Toto nastavení je výchozí.Potlačí také příznak globálního potvrzení, pokud propojíte váš program s Commode.obj.Výchozí příznak globálního potvrzení je "Ne potvrzení", pokud explicitní propojení aplikace s Commode.obj.

The t, c, and n mode options are Microsoft extensions for fopen and _fdopen.Nepoužívejte je, pokud chcete zachovat přenositelnost ANSI.

Pokud není uveden t nebo b v mode, je výchozí režim překladu definován pomocí globální proměnné _fmode.Pokud je t nebo b předponou argumentu, funkce selže a vrátí NULL.Informace o textu a binárních režimech naleznete v tématu Text a vstup-výstupní režim binárního souboru.

Platné znaky pro řetězec mode, který je použitý v rámci fopen a _fdopen odpovídá argumentům oflag, které jsou použity v _open a _sopen.

Znaky v mode řetězec

Equivalent oflagvalue for _open/_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

Žádná

n

Žádná

Požadavky

Funkce

Požadované záhlaví

_fdopen

<stdio.h>

_wfdopen

<stdio.h> nebo <wchar.h>

Další informace o kompatibilitě naleznete v tématu Kompatibilita.

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ýsledek

Lines in file: 2

Ekvivalent v rozhraní .NET Framework

System::IO::FileStream::FileStream

Viz také

Referenční dokumentace

I/O proudu

_dup, _dup2

fclose, _fcloseall

fopen, _wfopen

freopen, _wfreopen

_open, _wopen