freopen_s, _wfreopen_s

şu anda ilişkili oldStream olan dosyayı kapatır ve tarafından fileNamebelirtilen dosyaya yeniden atayınstream.

'nin freopen _wfreopenbu 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_errlistve _sys_nerr.

Açıklamalar

freopen_s işlevi genellikle ve ile stdinstdout 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 pathbelirtilen dosyaya yeniden atayırstream. _wfreopen_s , öğesinin freopen_sgeniş 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.

, , pathmodeveya NULLstream öğelerinden herhangi biri pFileveya 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_sgenellikle önceden açılmış , stdoutve stderr dosyalarını stdinkullanıcı tarafından belirtilen dosyalara yeniden yönlendirmek için kullanılır. ile stream ilişkilendirilmiş yeni dosya ile modeaçı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, fseekveya 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 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/Ç.

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, , stdoutve stderrile 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