Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Kojarzy strumień z plikiem, który został wcześniej otwarty dla operacji we/wy niskiego poziomu.
Składnia
FILE *_fdopen(
int fd,
const char *mode
);
FILE *_wfdopen(
int fd,
const wchar_t *mode
);
Parametry
fd
Deskryptor pliku otwartego.
mode
Typ dostępu do plików.
Wartość zwracana
Każda z tych funkcji zwraca wskaźnik do otwartego strumienia. Wartość wskaźnika o wartości null wskazuje błąd. W przypadku wystąpienia błędu wywoływana jest nieprawidłowa procedura obsługi parametrów, zgodnie z opisem w temacie Weryfikacja parametrów. Jeśli wykonywanie może być kontynuowane, errno jest ustawione na EBADFwartość , która wskazuje nieprawidłowy deskryptor plików lub EINVAL, co wskazuje, że mode był to wskaźnik o wartości null.
Aby uzyskać więcej informacji na temat tych i innych kodów błędów, zobacz errno, _doserrno, _sys_errlisti _sys_nerr.
Uwagi
Funkcja _fdopen kojarzy strumień we/wy z plikiem, który jest identyfikowany przez fdelement , a tym samym umożliwia otwarcie pliku, który jest otwarty w celu buforowania i formatowania operacji we/wy niskiego poziomu. _wfdopen jest wersją szerokoznakową ; _fdopenargument to mode _wfdopen ciąg o szerokim znaku. _wfdopen i _fdopen w inny sposób zachowują się identycznie.
Deskryptory plików przekazywane do _fdopen są własnością zwróconego strumienia FILE * . Jeśli _fdopen operacja zakończy się pomyślnie, nie wywołaj _close deskryptora plików. Wywołanie fclose zwróconego skryptu FILE * zamyka również deskryptor plików.
Domyślnie stan globalny tej funkcji jest zakresem aplikacji. Aby go zmienić, zobacz Stan globalny w CRT.
Ciąg mode znaków określa typ dostępu do pliku żądanego dla pliku:
mode |
Access |
|---|---|
"r" |
Otwiera plik do czytania. Jeśli plik nie istnieje lub nie można go odnaleźć, fopen wywołanie nie powiedzie się. |
"w" |
Otwiera pusty plik do zapisu. Jeśli dany plik istnieje, jego zawartość zostanie zniszczona. |
"a" |
Otwiera plik do zapisu na końcu pliku (dołączanie). Tworzy plik, jeśli nie istnieje. |
"r+" |
Otwiera plik zarówno do czytania, jak i zapisu. Plik musi istnieć. |
"w+" |
Otwiera pusty plik do odczytu i zapisu. Jeśli plik istnieje, jego zawartość zostanie zniszczona. |
"a+" |
Otwiera plik do odczytu i dołączania. Tworzy plik, jeśli nie istnieje. |
Po otwarciu "a" pliku z typem dostępu lub "a+" wszystkie operacje zapisu są wykonywane na końcu pliku. Wskaźnik pliku można zmienić za pomocą polecenia fseek lub rewind, ale zawsze jest przenoszony z powrotem na koniec pliku przed przeprowadzeniem dowolnej operacji zapisu. W związku z tym istniejące dane nie mogą być zastępowane. Po określeniu "r+"typu , "w+"lub "a+" dostępu zarówno odczyt, jak i zapis są dozwolone (plik jest podobno otwarty dla "aktualizacji"). Jednak w przypadku przełączania się między odczytem i zapisem musi istnieć interweniowanie fflushoperacji , fsetpos, lub fseekrewind . Możesz określić bieżące położenie operacji fsetpos lub fseek , jeśli chcesz.
Oprócz powyższych wartości można również uwzględnić następujące znaki, mode aby określić tryb tłumaczenia dla znaków nowego wiersza:
mode Modyfikator |
Zachowanie |
|---|---|
t |
Otwórz w trybie tekstowym (przetłumaczonym). W tym trybie kombinacje zestawienia powrotu karetki (CR-LF) są tłumaczone na jednowierszowe kanały informacyjne (LF) w danych wejściowych, a znaki LF są tłumaczone na kombinacje CR-LF w danych wyjściowych. Ponadto Ctrl+Z są interpretowane jako znak końca pliku w danych wejściowych. |
b |
Otwórz w trybie binarnym (nieprzetłumaczonym). Wszystkie tłumaczenia z t trybu są pomijane. |
c |
Włącz flagę zatwierdzania skojarzonej filename , aby zawartość buforu plików została zapisana bezpośrednio na dysku, jeśli fflush jest wywoływana wartość lub _flushall . |
n |
Zresetuj flagę zatwierdzenia dla skojarzonego filename z "no-commit". Ta flaga jest domyślna. Zastępuje również flagę zatwierdzenia globalnego, jeśli połączysz program za pomocą polecenia Commode.obj. Domyślna flaga zatwierdzenia globalnego to "no-commit", chyba że jawnie połączysz program z Commode.obj. |
Opcje t, ci n mode to rozszerzenia firmy Microsoft dla fopen systemów i _fdopen. Nie używaj ich, jeśli chcesz zachować przenośność ANSI.
Jeśli t wartość lub b nie jest podana w programie mode, domyślny tryb tłumaczenia jest definiowany przez zmienną globalną _fmode. Jeśli t argument lub b jest poprzedzony prefiksem, funkcja kończy się niepowodzeniem i zwraca wartość NULL. Aby zapoznać się z omówieniem trybów tekstowych i binarnych, zobacz Tekst i tryb binarny we/wy pliku.
Prawidłowe znaki dla ciągu używanego mode w fopen obiekcie i _fdopen odpowiadają oflag argumentom używanym w _open systemach i _sopen, jak pokazano w poniższej tabeli:
Znaki w mode ciągu |
Równoważna oflag wartość dla i _open_sopen |
|---|---|
a |
_O_WRONLY | _O_APPEND (zwykle _O_WRONLY | _O_CREAT | _O_APPEND) |
a+ |
_O_RDWR | _O_APPEND (zwykle _O_RDWR | _O_APPEND | _O_CREAT) |
r |
_O_RDONLY |
r+ |
_O_RDWR |
w |
_O_WRONLY (zwykle _O_WRONLY | _O_CREAT | _O_TRUNC) |
w+ |
_O_RDWR (zwykle _O_RDWR | _O_CREAT | _O_TRUNC) |
b |
_O_BINARY |
t |
_O_TEXT |
c |
Brak |
n |
Brak |
Wymagania
| Function | Wymagany nagłówek | Nagłówek języka C++ |
|---|---|---|
_fdopen |
<stdio.h> |
<cstdio> |
_wfdopen |
<stdio.h> lub <wchar.h> |
<cstdio> |
Aby uzyskać więcej informacji na temat zgodności standardów i konwencji nazewnictwa w bibliotece środowiska uruchomieniowego języka C, zobacz Zgodność.
Mapowania procedur tekstu ogólnego
<tchar.h> rutyna |
_UNICODE i _MBCS niezdefiniowane |
_MBCS zdefiniowany |
_UNICODE zdefiniowany |
|---|---|---|---|
_tfdopen |
_fdopen |
_fdopen |
_wfdopen |
Przykład
// 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 );
}
Dane wejściowe: crt_fdopen.txt
Line one
Line two
Wynik
Lines in file: 2
Zobacz też
We/Wy strumienia
_dup, _dup2
fclose, _fcloseall
fopen, _wfopen
freopen, _wfreopen
_open, _wopen