Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Membuka aliran dengan berbagi file.
Sintaks
FILE *_fsopen(
const char *filename,
const char *mode,
int shflag
);
FILE *_wfsopen(
const wchar_t *filename,
const wchar_t *mode,
int shflag
);
Parameter
filename
Nama file yang akan dibuka.
mode
Jenis akses yang diizinkan.
shflag
Jenis berbagi yang diizinkan.
Nilai hasil
Masing-masing fungsi ini mengembalikan penunjuk ke aliran. Nilai penunjuk null menunjukkan kesalahan. Jika filename atau mode adalah NULL atau string kosong, fungsi-fungsi ini memanggil handler parameter yang tidak valid, seperti yang dijelaskan dalam Validasi parameter. Jika eksekusi diizinkan untuk melanjutkan, fungsi-fungsi ini kembali NULL dan diatur errno ke EINVAL.
Untuk informasi selengkapnya tentang kode kesalahan ini dan lainnya, lihat errno, , _doserrno_sys_errlist, dan _sys_nerr.
Keterangan
Fungsi _fsopen membuka file yang ditentukan oleh filename sebagai aliran dan menyiapkan file untuk pembacaan atau penulisan bersama berikutnya, seperti yang didefinisikan oleh mode dan shflag argumen.
_wfsopen adalah versi karakter yang luas dari _fsopen; filename argumen dan mode untuk _wfsopen adalah string karakter lebar.
_wfsopen dan _fsopen berulah secara identik jika tidak.
String mode karakter menentukan jenis akses yang diminta untuk file, seperti yang ditunjukkan dalam tabel berikut.
| Istilah | Definisi |
|---|---|
"r" |
Buka untuk membaca. Jika file tidak ada atau tidak dapat ditemukan, _fsopen panggilan gagal. |
"w" |
Membuka file kosong untuk ditulis. Jika file yang diberikan ada, isinya akan dihancurkan. |
"a" |
Terbuka untuk menulis di akhir file (menambahkan); membuat file terlebih dahulu jika tidak ada. |
"r+" |
Terbuka untuk membaca dan menulis. (File harus ada.) |
"w+" |
Membuka file kosong untuk membaca dan menulis. Jika file yang diberikan ada, isinya akan dihancurkan. |
"a+" |
Buka untuk membaca dan menambahkan; membuat file terlebih dahulu jika tidak ada. |
Gunakan jenis "w" dan "w+" dengan hati-hati, karena dapat menghancurkan file yang ada.
Ketika file dibuka dengan jenis akses "a" atau ""a+, semua operasi tulis terjadi di akhir file. Penunjuk file dapat diposisikan ulang menggunakan fseek atau rewind, tetapi selalu dipindahkan kembali ke akhir file sebelum operasi tulis dilakukan. Dengan demikian, data yang ada tidak dapat ditimpa.
Ketika jenis akses "r+", "w+", atau "a+" ditentukan, baik membaca dan menulis diizinkan (file dikatakan terbuka untuk pembaruan). Namun, ketika beralih antara membaca dan menulis, harus ada operasi intervensi fsetpos, fseek, atau rewind . Posisi saat ini dapat ditentukan untuk fsetpos operasi atau fseek , jika diinginkan. Selain nilai di atas, salah satu karakter berikut dapat disertakan mode untuk menentukan mode terjemahan untuk baris baru, dan untuk manajemen file.
| Istilah | Definisi |
|---|---|
t |
Membuka file dalam mode teks (diterjemahkan). Dalam mode ini, kombinasi umpan baris kembali (CR-LF) pengangkutan diterjemahkan ke dalam umpan baris tunggal (LF) pada input dan 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 membaca/menulis, _fsopen memeriksa CTRL+Z di akhir file dan menghapusnya, jika memungkinkan. Ini dihapus karena menggunakan fseek dan ftell untuk berpindah dalam file yang diakhir dengan CTRL+Z mungkin menyebabkan fseek berperilaku tidak benar di dekat akhir file. |
b |
Membuka file dalam mode biner (tidak diterjemahkan) ; terjemahan di atas ditekan. |
D |
Menentukan file sementara yang dihapus ketika penunjuk file terakhir ditutup. |
R |
Menentukan bahwa penembolokan dioptimalkan untuk, tetapi tidak dibatasi, akses acak dari disk. |
S |
Menentukan bahwa penembolokan dioptimalkan untuk, tetapi tidak dibatasi, akses berurutan dari disk. |
T |
Menentukan file yang tidak ditulis ke disk kecuali tekanan memori memerlukannya. |
Jika t atau b tidak diberikan dalam mode, mode terjemahan ditentukan oleh variabel _fmodemode default . 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.
Mengenai T dan D:
-
Tmenghindari penulisan file ke disk selama tekanan memori tidak memerlukannya. Untuk informasi selengkapnya, lihatFILE_ATTRIBUTE_TEMPORARYdi Konstanta atribut file, dan juga posting blog ini Hanya sementara. -
Dmenentukan file reguler yang ditulis ke disk. Perbedaannya adalah dihapus secara otomatis saat ditutup. Anda dapat menggabungkanTDuntuk mendapatkan kedua semantik.
_fsopen dan _wfsopen merupakan varian khusus Microsoft dari fopen. Mereka bukan bagian dari standar ANSI. Untuk fungsi yang lebih portabel dan aman, jika Anda tidak memerlukan berbagi file, pertimbangkan _wfopen_s atau fopen_s.
Argumen shflag adalah ekspresi konstanta yang terdiri dari salah satu konstanta manifes berikut, yang ditentukan dalam Share.h.
| Istilah | Definisi |
|---|---|
_SH_DENYNO |
Mengizinkan akses baca dan tulis. |
_SH_DENYRD |
Menolak akses baca ke file. |
_SH_DENYRW |
Menolak akses baca dan tulis ke file. |
_SH_DENYWR |
Menolak akses tulis ke file. |
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 |
|---|---|---|---|
_tfsopen |
_fsopen |
_fsopen |
_wfsopen |
Persyaratan
| Fungsi | Header yang diperlukan | Header opsional |
|---|---|---|
_fsopen |
<stdio.h> |
<share.h>Untuk konstanta manifes untuk shflag parameter. |
_wfsopen |
<stdio.h> atau <wchar.h> |
<share.h>Untuk konstanta manifes untuk shflag parameter. |
Contoh
// crt_fsopen.c
#include <stdio.h>
#include <stdlib.h>
#include <share.h>
int main( void )
{
FILE *stream;
// Open output file for writing. Using _fsopen allows us to
// ensure that no one else writes to the file while we are
// writing to it.
//
if( (stream = _fsopen( "outfile", "wt", _SH_DENYWR )) != NULL )
{
fprintf( stream, "No one else in the network can write "
"to this file until we are done.\n" );
fclose( stream );
}
// Now others can write to the file while we read it.
system( "type outfile" );
}
No one else in the network can write to this file until we are done.
Lihat juga
Streaming I/O
fclose, _fcloseall
_fdopen, _wfdopen
ferror
_fileno
fopen, _wfopen
freopen, _wfreopen
_open, _wopen
_setmode
_sopen, _wsopen