Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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