Bagikan melalui


_fsopen, _wfsopen

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:

  • T menghindari penulisan file ke disk selama tekanan memori tidak memerlukannya. Untuk informasi selengkapnya, lihat FILE_ATTRIBUTE_TEMPORARY di Konstanta atribut file, dan juga posting blog ini Hanya sementara.
  • D menentukan file reguler yang ditulis ke disk. Perbedaannya adalah dihapus secara otomatis saat ditutup. Anda dapat menggabungkan TD untuk 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