_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