_fdopen, _wfdopen
Alt düzey g/ç için daha önce açılmış bir dosyayı içeren bir akış ilişkilendirir.
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şim türüdür.
Dönüş Değeri
Bu işlevlerden her biri için açık akış bir işaretçi döndürür.Bir null işaretçi değeri bir hata gösterir.Bir hata oluştuğunda, geçersiz bir parametre işleyicisi, açıklandığı gibi çağrılır Parametre Doğrulama.Yürütülmesine devam etmek için izin verilip verilmediğini errno ya da ayarlamak EBADF, bir hatalı dosya tanımlayıcısı belirtir veya EINVAL, hangi gösterir mode bir null işaretçi idi.
Bunlar ve diğer hata kodları hakkında daha fazla bilgi için bkz. _doserrno, errno, _sys_errlist ve _sys_nerr.
Notlar
_fdopen İşlev tarafından tanımlanan dosya g/ç akış associates fdve bu nedenle arabelleğe alınmış ve biçimlendirilmiş alt düzey g/ç için açtığınız bir dosya sağlar._wfdopen geniş karakterli bir _fdopen sürümüdür; mode ile ilgili biçim bağımsız değişkenler _wfdopengeniş karakterli dizelerdir._wfdopenve _fdopen yoksa aynı şekilde davranır.
Genel Metin Yordam Eşleşmeleri
Tchar.h yordamı |
_UNICODE ve _MBCS tanımlanmaz |
_MBCS tanımlanmış |
_UNICODE tanımlanmış |
---|---|---|---|
_tfdopen |
_fdopen |
_fdopen |
_wfdopen |
mode Karakter dizesi dosya ve dosya erişim türünü belirtir.
Karakter dizesi mode aşağıdaki tabloda gösterildiği gibi dosya için istenen erişim türünü belirtir.
"r"
Okuma için açar.Dosya yoksa ya da bulunamıyorsa, fopen çağrısı başarısız olur."w"
Yazma için boş bir dosya açar.Verilen dosya varsa içeriği yok edilir."a"
(Yapılanmışsa) dosya sonunda yazmak için açılır.Yoksa dosyayı oluşturur."r+"
Hem okuma hem yazma için açar. (Dosyanın varolması gerekir.)"w+"
Hem okuma hem de yazma için boş bir dosya açar.Verilen dosya varsa içeriği yok edilir."a+"
Okuma ve ekleme için açar.Yoksa dosyayı oluşturur.
Ne zaman bir dosya açıldığında ile "a" veya "a+" erişim türü, tüm yazma işlemlerini dosyasının sonunda ortaya.Dosya işaretçisini kullanarak yeniden konumlandırmak fseek veya rewind, ancak herhangi işlemi gerçekleştirilir yazmadan önce her zaman geri dosyasının sonuna taşınır.Bu nedenle, varolan verilerin üzerine yazılamaz."r+", "w+" veya "a+" erişim türü belirtildiğinde, hem okumaya hem yazmaya izin verilir (dosyanın "güncelleştirme" için açıldığı söylenir).Ancak, okuma ve yazma arasında geçiş yaptığınızda, olması gerekir bir araya giren fflush, fsetpos, fseek, veya rewind işlemi.Geçerli pozisyon için belirttiğiniz fsetpos veya fseek , isterseniz işlemi.
Yukarıdaki değerlerin yanı sıra, aşağıdaki karakterleri de eklenebilir mode yeni satır karakterlerini çeviri modunu belirtmek için.
t
Metin (çevrilmiş) modunda açın.Bu modda, satır başı satır besleme (CR-LF) birleşimleri giriş sayfasındaki tek satırlık Özet akışlarını (LF) içine çevrilir ve LF karakterleri çıktıda CR-LF birleşimleri için çevrilir.Ayrıca, Ctrl + Z giriş üzerinde bir dosya sonu karakteri olarak yorumlanır.Okuma/yazma için açılan dosyaları fopen Ctrl + Z dosyanın sonunda olup olmadığını denetler ve, mümkünse kaldırır.Bunu kullanarak yapılır, çünkü fseek ve ftell Ctrl + Z ile biten bir dosya içinde taşımak için İşlevler neden olabilecek fseek dosyanın sonuna yakın hatalı davranmasına.b
İkili (untranslated) modunda aç.Tüm Çeviriler gelen t modu özelliği.c
İlişkili filename için bayrak kaydetmeyi etkinleştirir, bu sayede fflush ya da_flushall çağrılırsa dosya tamponunun içeriği doğrudan diske yazılır.n
İlişkili filename için bayrak kaydetme işlemini "no-commit" olarak sıfırlayın. Bu varsayılandır.Ayrıca, programınızı Commode.obj ile bağlantı verirseniz genel tamamlama bayrağı geçersiz kılar.Programınızla birlikte Commode.obj açıkça bağlama sürece genel tamamlama bayrak "no-tamamlama" varsayılandır.
The t, c, and n mode options are Microsoft extensions for fopen and _fdopen.ANSI taşınabilirlik korumak istiyorsanız bunları kullanmayın.
t ya dabmode içinde verilmediğinde, varsayılan çeviri modu genel _fmode değişkeni tarafından tanımlanır.t ya dab bağımsız değişkene önek olarak verilmişse, işlev başarısız olur ve NULL döndürür.Metin ve ikili mod bir tartışma için bkz metin ve ikili mod dosya g/ç.
Geçerli karakterler için mode kullanılan dize fopen ve _fdopen karşılık gelen oflag bağımsız değişkenleri olarak kullanılan _open ve _sopenşu şekilde.
İçindeki karakterleri mode dize |
Equivalent oflagvalue for _open/_sopen |
---|---|
a |
_O_WRONLY | _O_APPEND (genelde _O_WRONLY | _O_CREAT | _O_APPEND) |
a+ |
_O_RDWR | _O_APPEND (genelde _O_RDWR | _O_APPEND | _O_CREAT ) |
r |
_O_RDONLY |
r+ |
_O_RDWR |
w |
_O_WRONLY (genelde _O_WRONLY | _O_CREAT | _O_TRUNC) |
w+ |
_O_RDWR (genelde _O_RDWR | _O_CREAT | _O_TRUNC) |
b |
_O_BINARY |
t |
_O_TEXT |
c |
None |
n |
None |
Gereksinimler
Function |
Gerekli başlık |
---|---|
_fdopen |
<stdio.h> |
_wfdopen |
<stdio.h> or <wchar.h> |
Uyumluluk hakkında daha fazla bilgi için bkz. Uyumluluk.
Ö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
.NET Framework Eşdeğeri
System::IO::FileStream::FileStream