Share via


freopen_s, _wfreopen_s

Menutup file yang saat ini terkait dengan oldStream dan menetapkan stream ulang ke file yang ditentukan oleh fileName.

Versi freopen, _wfreopen ini memiliki peningkatan keamanan, seperti yang dijelaskan dalam Fitur keamanan di CRT.

Sintaks

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
);

Parameter

stream
Parameter keluar yang akan menunjuk ke aliran yang dibuka kembali saat fungsi kembali.

fileName
Jalur file yang akan dibuka kembali.

mode
Mode untuk aliran yang dibuka kembali.

oldStream
Aliran untuk dibuka kembali. File dibersihkan dan file apa pun yang terkait dengannya ditutup.

Nilai hasil

Nol pada keberhasilan; jika tidak, kode kesalahan. Jika terjadi kesalahan, file asli ditutup, dan NULL ditulis ke stream kecuali stream juga NULL

Untuk informasi selengkapnya tentang kode kesalahan, lihat errno, , _doserrno_sys_errlist, dan _sys_nerr.

Keterangan

Fungsi freopen_s ini biasanya digunakan untuk melampirkan aliran yang telah dibuka sebelumnya yang terkait dengan stdin, stdout dan stderr ke file lain.

Fungsi freopen_s menutup file yang saat ini terkait dengan stream dan menetapkan stream ulang ke file yang ditentukan oleh path. _wfreopen_s adalah versi karakter yang luas dari freopen_s; path argumen dan mode untuk _wfreopen_s adalah string karakter lebar. _wfreopen_s dan freopen_s berulah secara identik jika tidak.

Jika salah satu dari , , , atau stream adalah NULL, atau jika path adalah string kosong, fungsi-fungsi ini memanggil handler parameter yang tidak valid, seperti yang dijelaskan dalam Validasi parameter. modepathpFile Jika eksekusi diizinkan untuk melanjutkan, fungsi-fungsi ini diatur errno ke EINVAL dan mengembalikan EINVAL.

Secara default, status global fungsi ini dicakup ke aplikasi. Untuk mengubah perilaku ini, lihat Status global di CRT.

Pemetaan rutin teks generik

TCHAR.H Rutin _UNICODE dan _MBCS tidak ditentukan _MBCS Didefinisikan _UNICODE Didefinisikan
_tfreopen_s freopen_s freopen_s _wfreopen_s

freopen_s biasanya digunakan untuk mengalihkan file stdinyang telah dibuka sebelumnya , , stdoutdan stderr ke file yang ditentukan oleh pengguna. File baru yang terkait dengan stream dibuka dengan mode, yang merupakan string karakter yang menentukan jenis akses yang diminta untuk file, sebagai berikut:

mode Access
"r" Buka untuk membaca. Jika file tidak ada atau tidak dapat ditemukan, freopen_s panggilan gagal.
"w" Membuka file kosong untuk ditulis. Jika file yang diberikan ada, isinya akan dihancurkan.
"a" Terbuka untuk menulis di akhir file (menambahkan) tanpa menghapus penanda end-of-file (EOF) sebelum data baru ditulis ke file. Membuat file jika tidak ada.
"r+" Terbuka untuk membaca dan menulis. File harus ada.
"w+" Membuka file kosong untuk membaca dan menulis. Jika file ada, isinya akan dihancurkan.
"a+" Terbuka untuk membaca dan menambahkan. Operasi penampingan mencakup penghapusan penanda EOF sebelum data baru ditulis ke file. Penanda EOF tidak dipulihkan setelah penulisan selesai. Membuat file jika tidak ada.

"w" Gunakan jenis dan "w+" dengan hati-hati, karena dapat menghancurkan file yang ada. Mulai dari C11, Anda dapat menambahkan "x" ke "w" atau "w+" menyebabkan fungsi gagal jika file ada, alih-alih menimpanya.

Ketika file dibuka dengan "a" jenis akses atau "a+" , semua operasi tulis terjadi di akhir file. Meskipun penunjuk file dapat diposisikan ulang menggunakan fseek atau rewind, penunjuk file selalu dipindahkan kembali ke akhir file sebelum operasi tulis dilakukan. Dengan demikian, data yang ada tidak dapat ditimpa.

"a" Mode tidak menghapus penanda EOF sebelum menambahkan ke file. Setelah penambahan terjadi, perintah MS-DOS TYPE hanya menampilkan data hingga penanda EOF asli dan bukan data apa pun yang ditambahkan ke file. "a+" Mode ini menghapus penanda EOF sebelum menambahkan ke file. Setelah menambahkan, perintah MS-DOS TYPE menunjukkan semua data dalam file. "a+" Mode ini diperlukan untuk menambahkan ke file stream yang dihentikan dengan penanda CTRL+Z EOF.

"r+"Ketika jenis akses , , "w+"atau "a+" ditentukan, baik membaca dan menulis diizinkan (file dikatakan terbuka untuk "pembaruan"). Namun, ketika Anda beralih antara membaca dan menulis, harus ada operasi intervensi fsetpos, fseek, atau rewind . Posisi saat ini dapat ditentukan untuk fsetpos operasi atau fseek , jika Anda mau. Selain nilai di atas, salah satu karakter berikut dapat disertakan dalam mode string untuk menentukan mode terjemahan untuk baris baru.

mode Pengubah Mode terjemahan
t Buka dalam mode teks (diterjemahkan).
b Buka dalam mode biner (tidak diterjemahkan) ; terjemahan yang melibatkan karakter carriage-return dan line feed ditekan.

Dalam mode teks (diterjemahkan), kombinasi umpan baris kembali (CR-LF) diterjemahkan ke dalam karakter umpan baris tunggal (LF) pada input; Karakter LF diterjemahkan ke kombinasi CR-LF pada output. Selain itu, CTRL+Z ditafsirkan sebagai karakter akhir file pada input. Dalam file yang dibuka untuk membaca atau menulis dan membaca dengan "a+", pustaka run-time memeriksa CTRL+Z di akhir file dan menghapusnya, jika memungkinkan. Ini dihapus karena menggunakan fseek dan ftell untuk berpindah dalam file dapat menyebabkan fseek berperilaku tidak benar di dekat akhir file. Jangan gunakan t opsi saat Anda menginginkan portabilitas ANSI karena ini adalah ekstensi Microsoft.

Jika t atau b tidak diberikan dalam mode, mode terjemahan default ditentukan oleh variabel _fmodeglobal . Jika t atau b diawali ke argumen, fungsi gagal dan mengembalikan NULL.

Untuk diskusi teks dan mode biner, lihat Teks dan I/O file mode biner.

Persyaratan

Function Header yang diperlukan
freopen_s <stdio.h>
_wfreopen_s <stdio.h> atau <wchar.h>

Konsol tidak didukung di aplikasi Platform Windows Universal (UWP). Handel aliran standar yang terkait dengan konsol, , stdin, stdoutdan stderr, harus dialihkan sebelum fungsi run-time C dapat menggunakannya di aplikasi UWP.

Untuk informasi kompatibilitas selengkapnya, lihat Kompatibilitas.

Contoh

// 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'

Baca juga

Stream I/O
freopen, _wfreopen
fclose, _fcloseall
_fdopen, _wfdopen
_fileno
fopen, _wfopen
_open, _wopen
_setmode