freopen_s
, _wfreopen_s
şu anda ilişkili oldStream
olan dosyayı kapatır ve tarafından fileName
belirtilen dosyaya yeniden atayınstream
.
'nin freopen
_wfreopen
bu sürümleri, CRT'deki Güvenlik özellikleri bölümünde açıklandığı gibi güvenlik geliştirmelerine sahiptir.
Sözdizimi
errno_t freopen_s(
FILE ** stream,
const char * fileName,
const char * mode,
FILE* oldStream
);
errno_t _wfreopen_s(
FILE ** stream,
const wchar_t * fileName,
const wchar_t * mode,
FILE * oldStream
);
Parametreler
stream
İşlev döndürdüğünde yeniden açılan akışı işaret edecek bir out parametresi.
fileName
Yeniden açılacak dosyanın yolu.
mode
Yeniden açılan akışın modu.
oldStream
Yeniden açılacak akış. Temizlenir ve onunla ilişkili tüm dosyalar kapatılır.
Dönüş değeri
Başarıda sıfır; aksi takdirde bir hata kodu. Hata oluşursa, özgün dosya kapatılır stream
stream
ve NULL
ayrıcaNULL
Hata kodları hakkında daha fazla bilgi için bkz. errno
, _doserrno
, _sys_errlist
ve _sys_nerr
.
Açıklamalar
freopen_s
işlevi genellikle ve ile stdin
stdout
stderr
ilişkilendirilmiş önceden açılmış akışları başka bir dosyaya eklemek için kullanılır.
İşlev, freopen_s
şu anda ilişkili stream
olan dosyayı kapatır ve tarafından path
belirtilen dosyaya yeniden atayırstream
. _wfreopen_s
, öğesinin freopen_s
geniş karakterli bir sürümüdür; path
ve mode
bağımsız değişkenleri _wfreopen_s
geniş karakterli dizelerdir. _wfreopen_s
ve freopen_s
aksi takdirde aynı şekilde davran.
, , path
mode
veya NULL
stream
öğelerinden herhangi biri pFile
veya boş bir dizeysepath
, bu işlevler Parametre doğrulamasında açıklandığı gibi geçersiz parametre işleyicisini çağırır. Yürütmenin devam etmesi için izin verilirse, bu işlevler olarak EINVAL
ayarlanır errno
ve döndürürEINVAL
.
Varsayılan olarak, bu işlevin genel durumunun kapsamı uygulama olarak belirlenmiştir. Bu davranışı değiştirmek için bkz. CRT'de Genel durum.
Genel metin yordamı eşlemeleri
TCHAR.H olağan |
_UNICODE ve _MBCS tanımlanmadı |
_MBCS tanımlanan |
_UNICODE tanımlanan |
---|---|---|---|
_tfreopen_s |
freopen_s |
freopen_s |
_wfreopen_s |
freopen_s
genellikle önceden açılmış , stdout
ve stderr
dosyalarını stdin
kullanıcı tarafından belirtilen dosyalara yeniden yönlendirmek için kullanılır. ile stream
ilişkilendirilmiş yeni dosya ile mode
açılır; bu, dosya için istenen erişim türünü belirten bir karakter dizesidir, aşağıdaki gibi:
mode |
Access |
---|---|
"r" |
Okuma için açılır. Dosya yoksa veya bulunamıyorsa, freopen_s ç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" |
Dosyaya yeni veriler yazılmadan önce dosya sonu (EOF) işaretçisini kaldırmadan dosyanın sonuna (ekleme) yazma için açılır. 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. Ekleme işlemi, dosyaya yeni veriler yazılmadan önce EOF işaretçisinin kaldırılmasını içerir. EOF işaretçisi, yazma işlemi tamamlandıktan sonra geri yüklenmez. Yoksa dosyayı oluşturur. |
"w"
Ve "w+"
türlerini, mevcut dosyaları yok edebildiği için dikkatli kullanın. C11'den başlayarak, dosyanın üzerine yazmak yerine işlevin başarısız olmasına neden olmak için öğesine veya ekleyebilirsiniz "x"
"w"
"w+"
.
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 kullanılarak fseek
yeniden konumlandırılsa da rewind
, herhangi bir yazma işlemi gerçekleştirilmeden önce dosya işaretçisi her zaman dosyanın sonuna geri taşınır. Bu nedenle, mevcut verilerin üzerine yazılamaz.
Mod, "a"
dosyaya eklemeden önce EOF işaretçisini kaldırmaz. Ekleme işlemi gerçekleştikten sonra, MS-DOS TYPE komutu yalnızca özgün EOF işaretçisine kadar olan verileri gösterir ve dosyaya eklenen verileri göstermez. Mod, "a+"
dosyaya eklemeden önce EOF işaretçisini kaldırır. Ekledikten sonra, MS-DOS TYPE komutu dosyadaki tüm verileri gösterir. Mod "a+"
, CTRL+Z EOF işaretçisiyle sonlandırılan bir akış dosyasına eklemek için gereklidir.
, "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, araya bir fsetpos
, fseek
veya rewind
işlemi gelmelidir. İsterseniz, veya fseek
işlemi için fsetpos
geçerli konum belirtilebilir. Yukarıdaki değerlere ek olarak, yeni satırlar için çeviri modunu belirtmek üzere dizeye aşağıdaki karakterlerden biri eklenebilir mode
.
mode Değiştirici |
Çeviri modu |
---|---|
t |
Metin (çevrilmiş) modunda açın. |
b |
İkili (çevrilmemiş) modda aç; satır başı ve satır besleme karakterleri içeren çeviriler gizleniyor. |
Metin (çevrilmiş) modunda satır başı besleme (CR-LF) birleşimleri girişteki tek satır besleme (LF) karakterlerine çevrilir; LF karakterleri çıkışta CR-LF birleşimlerine çevrilir. Ayrıca, CTRL+Z, girişte dosya sonu karakteri olarak yorumlanır. ile okumak veya yazmak ve okumak "a+"
için açılan dosyalarda, çalışma zamanı kitaplığı dosyanın sonunda CTRL+Z tuşlarını denetler ve mümkünse dosyayı kaldırır. Bir dosya içinde hareket etmek ve ftell
kullanmak fseek
dosyanın sonuna yakın bir şekilde düzgün davranmamasına neden fseek
olabileceğinden kaldırılır. AnSI taşınabilirliğini istediğinizde bu seçeneği kullanmayın t
çünkü bu bir Microsoft uzantısıdır.
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/Ç.
Gereksinimler
İşlev | Gerekli başlık |
---|---|
freopen_s |
<stdio.h> |
_wfreopen_s |
<stdio.h> veya <wchar.h> |
Konsol Evrensel Windows Platformu (UWP) uygulamalarında desteklenmez. C çalışma zamanı işlevlerinin UWP uygulamalarında kullanabilmesi için önce konsolu stdin
, , stdout
ve stderr
ile ilişkilendirilmiş standart akış tanıtıcılarının yeniden yönlendirilmesi gerekir.
Daha fazla uyumluluk bilgisi için bkz . Uyumluluk.
Örnek
// crt_freopen_s.c
// This program reassigns stderr to the file
// named FREOPEN.OUT and writes a line to that file.
#include <stdio.h>
#include <stdlib.h>
FILE *stream;
int main( void )
{
errno_t err;
// Reassign "stderr" to "freopen.out":
err = freopen_s( &stream, "freopen.out", "w", stderr );
if( err != 0 )
fprintf( stdout, "error on freopen\n" );
else
{
fprintf( stdout, "successfully reassigned\n" );
fflush( stdout );
fprintf( stream, "This will go to the file 'freopen.out'\n" );
fclose( stream );
}
system( "type freopen.out" );
}
successfully reassigned
This will go to the file 'freopen.out'
Ayrıca bkz.
Stream I/O
freopen
, _wfreopen
fclose
, _fcloseall
_fdopen
, _wfdopen
_fileno
fopen
, _wfopen
_open
, _wopen
_setmode