Udostępnij za pośrednictwem


_fdopen, _wfdopen

Kojarzy strumienia z pliku, który został uprzednio otwarty dla niskiego poziomu we/wy.

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

Parametry

  • fd
    Deskryptor pliku otwartego pliku.

  • mode
    Typ dostępu do pliku.

Wartość zwracana

Każda z tych funkcji zwraca wskaźnik do otwartych strumienia.Wartość null, wskaźnik wskazuje na błąd.Gdy wystąpi błąd, nieprawidłowy parametr wywoływana jest funkcja obsługi, jak opisano w Sprawdzanie poprawności parametru.Jeśli wykonanie może kontynuować, errno jest ustawiona albo na EBADF, która wskazuje deskryptor pliku uszkodzonych lub EINVAL, która wskazuje, że mode został wskaźnik zerowy.

Aby uzyskać więcej informacji na temat tych i innych kodów błędów, zobacz _doserrno, errno, _sys_errlist i _sys_nerr.

Uwagi

_fdopen Funkcji kojarzy strumień we/wy z pliku, który jest identyfikowany przez fd, umożliwiając w ten sposób plik, który jest otwarty dla niskiego poziomu we/wy buforowane i sformatowane._wfdopenjest to wersja szerokich znaków _fdopen; mode argument _wfdopen jest łańcuch szerokich znaków._wfdopeni _fdopen inaczej zachowują się identycznie.

Tekst rodzajowy rutynowych mapowania

Procedura TCHAR.h

_UNICODE i _MBCS nie zdefiniowane

_MBCS, definicja

_UNICODE, definicja

_tfdopen

_fdopen

_fdopen

_wfdopen

mode Ciąg znaków określa typ pliku i dostępu do pliku.

Ciąg znaków mode określa typ dostępu zażądał pliku, jak pokazano w poniższej tabeli.

  • "r"
    Zostanie otwarty do odczytu.Jeśli plik nie istnieje lub nie można odnaleźć fopen wywołanie kończy się niepowodzeniem.

  • "w"
    Otwiera pusty plik do zapisu.Jeśli dany plik istnieje, jego zawartość są niszczone.

  • "a"
    Zostanie otwarty do zapisu na końcu pliku (dołączanie).Tworzy plik, jeśli nie istnieje.

  • "r+"
    Otwiera zarówno Odczyt i zapis.(Plik musi istnieć).

  • "w+"
    Otwiera pusty plik do zarówno odczytu i zapisu.Jeśli dany plik istnieje, jego zawartość są niszczone.

  • "a+"
    Zostanie otwarty do odczytu i dołączanie.Tworzy plik, jeśli nie istnieje.

Przy otwieraniu pliku z "a" lub "a+" dostępu typu zapis wszystkich operacji występuje na końcu pliku.Można zmieniać rozmieszczenie przy użyciu wskaźnika pliku fseek lub rewind, ale jest zawsze przenoszona wstecz do końca pliku przed napisać dowolną czynność jest przeprowadzana.Dlatego nie można zastąpić istniejące dane.Gdy "r+", "w+", lub "a+" jest określony typ dostępu, zarówno czytania i pisania są dozwolone (plik powiedział zostanie otwarta do "aktualizacja").Jednak podczas przełączania między odczytu i zapisu, musi istnieć interwencji fflush, fsetpos, fseek, lub rewind operacji.Można określić bieżącego położenia dla fsetpos lub fseek operacji, jeśli chcesz.

Oprócz powyższych wartości następujących znaków można również uwzględniona w mode , aby określić tryb tłumaczenia na znaki nowego wiersza.

  • t
    Otwórz w tekście (translacji) trybu.W tym trybie kombinacji paszy return-line (CR LF) przewozu zostały przetłumaczone na jednego wiersza źródła (LF) na wejściu, i znaki LF są tłumaczone na kombinacji CR LF na wyjściu.Ponadto Ctrl + Z jest interpretowana jako znaku końca pliku na wejściu.W przypadku plików otwartych do odczytu/zapisu fopen sprawdza, czy Ctrl + Z końcem pliku i usuwa go, jeśli to możliwe.Robi się, ponieważ za pomocą fseek i ftell może spowodować funkcji Przenieś plik, który kończy się klawisze Ctrl + Z fseek do niepoprawnie zachowują się w pobliżu końca pliku.

  • b
    Otwórz w trybie binarnym (nieprzetłumaczony).Wszelkie tłumaczenia z t tryb są pomijane.

  • c
    Włącz flagę commit skojarzonych z nim filename tak, aby zawartość buforu pliku są zapisywane bezpośrednio na dysku, jeżeli albo fflush lub _flushall jest wywoływana.

  • n
    Zresetuj flagę commit skojarzonych z nim filename do "commit nr." Domyślnie włączone.Zastępuje ona również flagi globalnej commit Jeśli łącze programu z Commode.obj.Domyślną flagi globalnej commit jest "nr commit", chyba że wyraźnie łącze programu z Commode.obj.

The t, c, and nmode options are Microsoft extensions for fopen and _fdopen.Nie należy ich używać, jeśli chcesz zachować możliwość przenoszenia ANSI.

Jeśli t lub b nie znajduje się w mode, domyślny tryb translacji jest zdefiniowany przez zmienną globalną _fmode.Jeśli t lub b jest poprzedzona argument, funkcja kończy się niepowodzeniem i zwraca NULL.Tekst i binarne trybów, zobacz tekstu i binarny tryb We/Wy pliku.

Prawidłowe znaki dla mode ciąg używany w fopen i _fdopen odpowiadają oflag argumenty używane w _open i _sopen, w następujący sposób.

Znaki w mode ciąg

Equivalent oflagvalue for _open/_sopen

a

_O_WRONLY | _O_APPEND(usually _O_WRONLY | _O_CREAT | _O_APPEND)

a+

_O_RDWR | _O_APPEND (usually _O_RDWR | _O_APPEND | _O_CREAT )

r

_O_RDONLY

r+

_O_RDWR

w

_O_WRONLY(usually _O_WRONLY | _O_CREAT | _O_TRUNC)

w+

_O_RDWR(usually _O_RDWR | _O_CREAT | _O_TRUNC)

b

_O_BINARY

t

_O_TEXT

c

Brak

n

Brak

Wymagania

Funkcja

Wymaganego nagłówka

_fdopen

<stdio.h>

_wfdopen

<stdio.h> lub <wchar.h>

Informacji dotyczących zgodności, zobacz Zgodność.

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

dye30d82.collapse_all(pl-pl,VS.110).gifDane wyjściowe

Lines in file: 2

Odpowiednik w programie .NET Framework

System::IO::FileStream::FileStream

Zobacz też

Informacje

Strumień we/wy

_dup, _dup2

fclose, _fcloseall

fopen, _wfopen

freopen, _wfreopen

_open, _wopen