_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
_doserrno
errno
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ě. _wfdopen
je verze širokého znaku _fdopen
mode
; 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
, , fseek
nebo 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 . |
, t
c
a 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