Aracılığıyla paylaş


_fdopen, _wfdopen

Bir akışı daha önce alt düzey G/Ç için açılmış bir dosyayla ilişkilendirir.

Sözdizimi

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

Parametreler

fd
Açık dosyanın dosya tanımlayıcısı.

mode
Dosya erişimi türü.

Dönüş değeri

Bu işlevlerin her biri açık akışa bir işaretçi döndürür. Null işaretçi değeri bir hatayı gösterir. Bir hata oluştuğunda, parametre doğrulamasında açıklandığı gibi geçersiz parametre işleyicisi çağrılır. Yürütmenin devam etmesi için izin verilirse, errno hatalı bir dosya tanımlayıcısını EINVALgösteren veya null işaretçi olduğunu mode belirten olarak ayarlanırEBADF.

Bunlar ve diğer hata kodları hakkında daha fazla bilgi için bkz. errno, _doserrno, _sys_errlistve _sys_nerr.

Açıklamalar

İşlev, _fdopen G/Ç akışını tarafından fdtanımlanan dosyayla ilişkilendirir ve bu nedenle alt düzey G/Ç için açılan bir dosyanın arabelleğe alınmasına ve biçimlendirilmesine izin verir. _wfdopen , öğesinin _fdopengeniş karakterli bir sürümüdür; mode bağımsız değişkeni _wfdopen geniş karakterli bir dizedir. _wfdopen ve _fdopen aksi takdirde aynı şekilde davranır.

geçirilen _fdopen dosya tanımlayıcıları, döndürülen FILE * akışa aittir. Başarılı olursa _fdopen , dosya tanımlayıcısını aramayın _close . Döndürülen FILE * üzerinde çağrılması fclose da dosya tanımlayıcısını kapatır.

Varsayılan olarak, bu işlevin genel durumunun kapsamı uygulama olarak belirlenmiştir. Bunu değiştirmek için bkz . CRT'de Genel durum.

Karakter mode dizesi, dosya için istenen dosya erişimi türünü belirtir:

mode Access
"r" Okuma için açılır. Dosya yoksa veya bulunamıyorsa, fopen çağrı başarısız olur.
"w" Yazmak için boş bir dosya açar. Verilen dosya varsa, içeriği yok edilir.
"a" Dosyanın sonuna yazmak için açılır (ekleme). Yoksa dosyayı oluşturur.
"r+" Hem okuma hem de yazma için açılır. Dosya mevcut olmalıdır.
"w+" Hem okuma hem de yazma için boş bir dosya açar. Dosya varsa, içeriği yok edilir.
"a+" Okuma ve ekleme için açılır. Yoksa dosyayı oluşturur.

Veya "a+" erişim türüyle "a" bir dosya açıldığında, tüm yazma işlemleri dosyanın sonunda gerçekleşir. Dosya işaretçisi veya rewindkullanılarak fseek yeniden konumlandırılabilir, ancak herhangi bir yazma işlemi gerçekleştirilmeden önce her zaman dosyanın sonuna geri taşınır. Bu nedenle, mevcut verilerin üzerine yazılamaz. , "w+"veya "a+" erişim türü belirtildiğinde"r+", hem okuma hem de yazma işlemlerine izin verilir (dosyanın "güncelleştirme" için açık olduğu söylenir). Ancak, okuma ve yazma arasında geçiş yaptığınızda, bir araya fflushgelen , fsetpos, fseekveya rewind işlemi olmalıdır. İsterseniz veya fseek işlemi için fsetpos geçerli konumu belirtebilirsiniz.

Yukarıdaki değerlere ek olarak, yeni satır karakterleri için çeviri modunu belirtmek üzere aşağıdaki karakterler de eklenebilir mode :

mode Değiştirici Davranış
t Metin (çevrilmiş) modunda açın. Bu modda, satır başı besleme (CR-LF) birleşimleri girişte tek satırlı akışlara (LF) çevrilir ve LF karakterleri çıkışta CR-LF birleşimlerine çevrilir. Ayrıca, Ctrl+Z, girişte dosya sonu karakteri olarak yorumlanır.
b İkili (çevrilmemiş) modda açın. Moddan yapılan t tüm çeviriler gizleniyor.
c dosya arabelleğinin içeriğinin veya çağrılırsa fflush _flushall doğrudan diske yazılabilmesi için ilişkili filename için işleme bayrağını etkinleştirin.
n "İşleme yok" ile ilişkili filename için işleme bayrağını sıfırlayın. Bu bayrak varsayılandır. Ayrıca programınızı ile Commode.objbağlarsanız genel işleme bayrağını geçersiz kılar. Programınızı ile Commode.objaçıkça bağlamadığınız sürece genel işleme bayrağı varsayılan olarak "işleme yok" olur.

t, cve seçenekleri ve n mode için fopen _fdopenMicrosoft uzantılarıdır. ANSI taşınabilirliğini korumak istiyorsanız bunları kullanmayın.

t veya b içinde modeverilmediyse, varsayılan çeviri modu genel değişkeni _fmodetarafından tanımlanır. veya b bağımsız değişkenine ön ekliyse t işlev başarısız olur ve döndürürNULL. Metin ve ikili modlar hakkında bir tartışma için bkz . Metin ve ikili mod dosyası G/Ç.

bu tabloda gösterildiği gibi ve içinde fopen _open kullanılan bağımsız değişkenlere oflag karşılık gelen ve _fdopen _sopeniçinde kullanılan dize için mode geçerli karakterler:

Dizedeki mode karakterler ve için _open eşdeğer oflag değer_sopen
a _O_WRONLY | _O_APPEND (genellikle _O_WRONLY | _O_CREAT | _O_APPEND)
a+ _O_RDWR | _O_APPEND (genellikle _O_RDWR | _O_APPEND | _O_CREAT)
r _O_RDONLY
r+ _O_RDWR
w _O_WRONLY (genellikle _O_WRONLY | _O_CREAT | _O_TRUNC)
w+ _O_RDWR (genellikle _O_RDWR | _O_CREAT | _O_TRUNC)
b _O_BINARY
t _O_TEXT
c Hiçbiri
n Hiçbiri

Gereksinimler

İşlev Gerekli başlık C++ üst bilgisi
_fdopen <stdio.h> <cstdio>
_wfdopen <stdio.h> veya <wchar.h> <cstdio>

C çalışma zamanı kitaplığındaki standartlar uyumluluğu ve adlandırma kuralları hakkında daha fazla bilgi için bkz . Uyumluluk.

Genel metin yordamı eşlemeleri

<tchar.h> olağan _UNICODE ve _MBCS tanımlanmadı _MBCS tanımlanan _UNICODE tanımlanan
_tfdopen _fdopen _fdopen _wfdopen

Örnek

// 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 );
}

Giriş: crt_fdopen.txt

Line one
Line two

Çıktı

Lines in file: 2

Ayrıca bkz.

Akış G/Ç
_dup, _dup2
fclose, _fcloseall
fopen, _wfopen
freopen, _wfreopen
_open, _wopen