_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ı EINVAL
gö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_errlist
ve _sys_nerr
.
Açıklamalar
İşlev, _fdopen
G/Ç akışını tarafından fd
tanı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 _fdopen
geniş 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 rewind
kullanı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 fflush
gelen , fsetpos
, fseek
veya 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.obj bağlarsanız genel işleme bayrağını geçersiz kılar. Programınızı ile Commode.obj açıkça bağlamadığınız sürece genel işleme bayrağı varsayılan olarak "işleme yok" olur. |
t
, c
ve seçenekleri ve n
mode
için fopen
_fdopen
Microsoft uzantılarıdır. ANSI taşınabilirliğini korumak istiyorsanız bunları kullanmayın.
t
veya b
içinde mode
verilmediyse, varsayılan çeviri modu genel değişkeni _fmode
tarafı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
_sopen
iç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