Udostępnij za pośrednictwem


_fdopen, _wfdopen

Kojarzy strumienia z pliku, który został wcześniej 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 otworzyć strumienia.Wartość null wskaźnika wskazuje na błąd.Gdy wystąpi błąd, program obsługi nieprawidłowy parametr jest wywoływany, zgodnie z opisem w Sprawdzanie poprawności parametru.Jeśli wykonanie będzie mógł kontynuować, errno jest zestaw albo EBADF, która wskazuje deskryptor pliku uszkodzonych lub EINVAL, który wskazuje, że mode był pusty wskaźnik.

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

Uwagi

_fdopen Funkcja 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._wfdopen to wersja znaku dwubajtowego _fdopen; argument mode do _wfdopen to ciąg znaku dwubajtowego._wfdopeni _fdopen inaczej zachowują się identycznie.

Rutynowe mapowania zwykłego tekstu

Procedura Tchar.h

_UNICODE i _MBCS nie zdefiniowany

_MBCS zdefiniowano

_UNICODE zdefiniowany

_tfdopen

_fdopen

_fdopen

_wfdopen

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

Ciąg znaków mode Określa typ dostępu do tego pliku, jak pokazano w poniższej tabeli.

  • "r"
    Otwiera do odczytu.Jeśli plik nie istnieje lub nie można go znaleźć, wywołanie funkcji fopen kończy się niepowodzeniem.

  • "w"
    Otwiera pusty plik do zapisu.Jeśli dany plik istnieje, jego zawartość zostaje zniszczona.

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

  • "r+"
    Otwiera zarówno do odczytu, jak i do zapisu. (Plik musi istnieć).

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

  • "a+"
    Otwiera do odczytu i dołączania.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.Wskaźnik pliku może być przeniesiony za pomocą fseek lub rewind, ale to jest zawsze przenoszony z powrotem do końca pliku było wpisywanie dowolną czynność jest przeprowadzana.W związku z tym nie można nadpisać istniejących danych.Gdy jest określony typ dostępu "r+", "w+" lub "a+", dozwolony jest zarówno odczyt, jak i zapis (plik określa się jako otwarty do "aktualizacji").Jednak podczas przełączania między czytanie i pisanie, musi istnieć interwencji fflush, fsetpos, fseek, lub rewind operacji.Można określić bieżącą pozycję dla fsetpos lub fseek operacji, jeśli chcesz.

Oprócz powyższych wartości, następujące znaki mogą być zawarte w mode Aby określić tryb translacji znaków nowego wiersza.

  • t
    Otwieranie w trybie tekstowym (tłumaczonym).W tym trybie przewozu return-line feed (CR-LF) kombinacje są tłumaczone na jednego wiersza źródła (LF) na wejściu, a znaki wysuwu wiersza są tłumaczone na CR-LF kombinacji na wyjściu.Ponadto Ctrl + Z jest interpretowana jako znak końca pliku na wejściu.W przypadku plików otwartych do odczytu/zapisu fopen sprawdza Ctrl + Z końcem pliku i usuwa je, jeśli to możliwe.To zrobić, ponieważ za pomocą fseek i ftell może spowodować, że funkcje, aby przenieść w pliku, który kończy się Ctrl + Z fseek będzie działać niepoprawnie pod koniec pliku.

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

  • c
    Włącz flagę zatwierdzania dla skojarzonego parametru filename, tak aby zawartość buforu pliku została zapisana bezpośrednio na dysku, jeśli zostanie wywołana funkcja fflush lub _flushall.

  • n
    Resetowanie flagi zatwierdzenia dla skojarzonego parametru filename na wartość „no-commit”. Domyślnie włączone.Zastępuje ona również flagi globalnej zatwierdzanie Jeśli łącze programu z Commode.obj.Domyślnie flagi globalnej zatwierdzanie jest "Zatwierdzanie nie", chyba że jawnie połączyć program z Commode.obj.

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

Jeśli wartość t lub b nie jest podana w parametrze mode, domyślny tryb translacji jest zdefiniowany przez zmienną globalną _fmode.Jeśli argument jest poprzedzony wartością t lub b, funkcja kończy się niepowodzeniem i zwraca wartość NULL.W celu dyskusji na temat trybu tekstowego i binarnego, zobacz Operacja We/Wy pliku w trybie binarnym i tekstowym.

Prawidłowe znaki ciągu tekstowego mode używane w funkcji fopen i _fdopen odpowiadają argumentom oflag używanych w funkcjach _open i _sopen, w następujący sposób.

Znaki w mode ciąg

Equivalent oflagvalue for _open/_sopen

a

_O_WRONLY | _O_APPEND (zazwyczaj _O_WRONLY | _O_CREAT | _O_APPEND)

a+

_O_RDWR | _O_APPEND (zazwyczaj _O_RDWR | _O_APPEND | _O_CREAT )

r

_O_RDONLY

r+

_O_RDWR

w

_O_WRONLY (zazwyczaj _O_WRONLY | _O_CREAT | _O_TRUNC)

w+

_O_RDWR (zazwyczaj _O_RDWR | _O_CREAT | _O_TRUNC)

b

_O_BINARY

t

_O_TEXT

c

Brak

n

Brak

Wymagania

Funkcja

Wymagany nagłówek

_fdopen

<stdio.h>

_wfdopen

<stdio.h> lub <wchar.h>

Aby uzyskać więcej informacji na temat 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

Dane wyjściowe

Lines in file: 2

Odpowiednik w programie .NET Framework

System::IO::FileStream::FileStream

Zobacz też

Informacje

We/Wy strumienia

_dup, _dup2

fclose, _fcloseall

fopen, _wfopen

freopen, _wfreopen

_open, _wopen