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. mode
path
pFile
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 stdin
yang telah dibuka sebelumnya , , stdout
dan 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 _fmode
global . 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
, stdout
dan 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
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk