_fdopen, _wfdopen
Alt düzey g/Ç için daha önce açılmış bir dosya 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 açık akış bir işaretçi döndürür. Null işaretçi değeri hata gösterir. Bir hata oluştuğunda geçersiz parametre işleyicisi, açıklandığı şekilde çağrılır Parametre doğrulama. Yürütülmesine devam etmek için izin verilip verilmediğini errno ya da ayarlanmış olduğunu EBADF, 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 İşlevi tarafından tanımlanan dosya g/Ç akışını associates fdve bu nedenle düşük düzeyli I/o arabelleğe alınmış ve biçimlendirilmiş açtığınız bir dosya sağlar. _wfdopengeniş karakter sürümü _fdopen; mode bağımsız değişkeni _wfdopen bir geniş karakter dizesidir. _wfdopenve _fdopen Aksi takdirde aynı şekilde davranır.
Genel metin yordamı eşlemeleri
Tchar.h yordamına girildi |
_UNICODE ve _mbcs tanımlı değil |
_mbcs, tanımlı |
_UNICODE, tanımlı |
---|---|---|---|
_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 şekilde dosya için istenen erişim türünü belirtir.
"r"
Okuma için açılır. Dosya yok veya bulunamıyor, fopen çağrısı başarısız."w"
Yazmak için boş bir dosya açar. Belirli bir dosya varsa, içeriği yok edilir."a"
Sonunda (ekleme) dosya yazmak için açılır. Yoksa, dosyayı oluşturur."r+"
Hem okumak ve yazmak için açılır. (Dosyanın varolması gerekir.)"w+"
Hem okumak ve yazmak için boş bir dosya açar. Belirli bir dosya varsa, içeriği yok edilir."a+"
Okuma ve ekleme 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, dosyanın sonunda ortaya. Dosya işaretçisi kullanarak yeniden fseek veya rewind, ancak herhangi bir işlem gerçekleştirilir yazmadan önce her zaman geri dosyasının sonuna taşınır. Böylece, varolan verilerin üzerine yazılamaz. Zaman "r+", "w+", veya "a+" erişim türü belirtilen, hem okuma hem de yazma izin verilir (dosya açık "güncelleştirmesi" denir). Ancak, okuma ve yazma arasında geçiş yaptığınızda, bulunması bir araya fflush, fsetpos, fseek, veya rewind işlem. Geçerli pozisyon için belirttiğiniz fsetpos veya fseek isterseniz işlemi.
Yukarıdaki değerleri ek olarak aşağıdaki karakterleri de eklenebilir mode yeni satır karakterlerini çeviri modunu belirtmek için.
t
Açık metin (mod çevrilir). Bu mod, satır başı (cr-lf) dönüş ve satır besleme birleşimleri giriş sayfasındaki tek satırlık özet akışlarını (lf) içine çevrilir ve lf karakterleri çıktıda cr-lf kombinasyonlarına çevrilir. Ayrıca, Ctrl + z giriş üzerinde bir dosya sonu karakteri olarak yorumlanır. Okuma/yazma için açılan dosyalar, fopen için Ctrl + z dosya sonunda denetler ve mümkünse, kaldırır. Bu kullanma çünkü yapılır fseek ve ftell Ctrl + z ile biten bir dosya içinde taşımak için İşlevler neden olabilecek fseek dosyasının sonuna hatalı davranmaya.b
İkili (untranslated) modunda aç. Gelen tüm çevirileri t modu özelliği.c
İlişkili tamamlama bayrağını etkinleştirmek filename dosya tampon içeriğini, doğrudan diske yazılırlar, fflush veya _flushall olarak adlandırılır.n
İlişkili tamamlama bayrağı Sıfırla filename için "no-tamamlama." Varsayılan değer budur. Ayrıca Commode.obj birlikte bağlarsanız Genel tamamlama bayrağı geçersiz kılar. Commode.obj birlikte açıkça bağlantı sürece Genel tamamlama bayrağı "no-Tamamlama" varsayılandır.
The t, c, and nmode options are Microsoft extensions for fopen and _fdopen. ANSI taşınabilirlik korumak istiyorsanız bunları kullanmayın.
t Veya b verilmez mode, genel değişkeni tarafından tanımlanan varsayılan çeviri modu _fmode. t Veya b bağımsız değişken, işlev başarısız olur ve döndürür öneki NULL. Metin ve ikili mod 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 oflag kullanılan bağımsız değişkenler _open ve _sopengibi.
Karakterler mode dize |
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 |
None |
n |
None |
Gereksinimler
İşlev |
Gerekli başlık |
---|---|
_fdopen |
<stdio.h> |
_wfdopen |
<stdio.h> veya <wchar.h> |
Daha fazla uyumluluk bilgileri 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