_open, _wopen

Membuka file. Fungsi-fungsi ini tidak digunakan lagi karena versi yang lebih aman tersedia; lihat _sopen_s, _wsopen_s.

Sintaks

int _open(
   const char *filename,
   int oflag [,
   int pmode]
);
int _wopen(
   const wchar_t *filename,
   int oflag [,
   int pmode]
);

Parameter

filename
Nama file.

oflag
Jenis operasi yang diizinkan.

pmode
Mode izin.

Nilai hasil

Masing-masing fungsi ini mengembalikan pendeskripsi file untuk file yang dibuka. Nilai pengembalian -1 menunjukkan kesalahan; dalam hal errno ini diatur ke salah satu nilai berikut.

errno nilai Kondisi
EACCES Mencoba membuka file baca-saja untuk ditulis, mode berbagi file tidak mengizinkan operasi yang ditentukan, atau jalur yang diberikan adalah direktori.
EEXIST _O_CREAT dan _O_EXCL bendera yang ditentukan, tetapi filename sudah ada.
EINVAL Tidak valid oflag atau pmode argumen.
EMFILE Tidak ada lagi deskriptor file yang tersedia (terlalu banyak file yang terbuka).
ENOENT File atau jalur tidak ditemukan.

Untuk informasi selengkapnya tentang kode pengembalian ini dan lainnya, lihat errno, , _doserrno_sys_errlist, dan _sys_nerr.

Keterangan

Fungsi _open membuka file yang ditentukan oleh filename dan mempersiapkannya untuk membaca atau menulis, seperti yang ditentukan oleh oflag. _wopen adalah versi karakter luas dari _open; filename argumen ke _wopen adalah string karakter lebar. _wopen dan _open berulah secara identik jika tidak.

Pemetaan rutin teks generik

<tchar.h> Rutin _UNICODE dan _MBCS tidak ditentukan _MBCS Didefinisikan _UNICODE Didefinisikan
_topen _open _open _wopen

oflag adalah ekspresi bilangan bulat yang terbentuk dari satu atau beberapa konstanta manifes atau kombinasi konstanta berikut, yang didefinisikan dalam <fcntl.h>.

konstanta oflag Perilaku
_O_APPEND Memindahkan penunjuk file ke akhir file sebelum setiap operasi tulis.
_O_BINARY Membuka file dalam mode biner (tidak diterjemahkan). (Lihat fopen untuk deskripsi mode biner.)
_O_CREAT Membuat file dan membukanya untuk ditulis. Tidak berpengaruh jika file yang ditentukan oleh filename ada. Argumen pmode diperlukan ketika _O_CREAT ditentukan.
_O_CREAT | _O_SHORT_LIVED Membuat file sebagai sementara dan jika memungkinkan tidak memerah ke disk. Argumen pmode diperlukan ketika _O_CREAT ditentukan.
_O_CREAT | _O_TEMPORARY Membuat file sebagai sementara; file dihapus ketika pendeskripsi file terakhir ditutup. Argumen pmode diperlukan ketika _O_CREAT ditentukan. Untuk mempertahankan perilaku warisan untuk kompatibilitas aplikasi, proses lain tidak dicegah menghapus file ini.
_O_CREAT | _O_EXCL Mengembalikan nilai kesalahan jika file yang ditentukan oleh filename ada. Hanya berlaku saat digunakan dengan _O_CREAT.
_O_NOINHERIT Mencegah pembuatan deskriptor file bersama.
_O_RANDOM Menentukan bahwa penembolokan dioptimalkan untuk, tetapi tidak dibatasi, akses acak dari disk.
_O_RDONLY Membuka file untuk dibaca saja. Tidak dapat ditentukan dengan _O_RDWR atau _O_WRONLY.
_O_RDWR Membuka file untuk membaca dan menulis. Tidak dapat ditentukan dengan _O_RDONLY atau _O_WRONLY.
_O_SEQUENTIAL Menentukan bahwa penembolokan dioptimalkan untuk, tetapi tidak dibatasi, akses berurutan dari disk.
_O_TEXT Membuka file dalam mode teks (diterjemahkan). (Untuk informasi selengkapnya, lihat Teks dan file mode biner I/O dan fopen.)
_O_TRUNC Membuka file dan memotongnya menjadi panjang nol; file harus memiliki izin tulis. Tidak dapat ditentukan dengan _O_RDONLY. _O_TRUNC digunakan dengan _O_CREAT membuka file yang ada atau membuat file. Catatan: Bendera _O_TRUNC menghancurkan konten file yang ditentukan.
_O_WRONLY Membuka file hanya untuk menulis. Tidak dapat ditentukan dengan _O_RDONLY atau _O_RDWR.
_O_U16TEXT Membuka file dalam mode Unicode UTF-16.
_O_U8TEXT Membuka file dalam mode Unicode UTF-8.
_O_WTEXT Membuka file dalam mode Unicode.

Untuk menentukan mode akses file, Anda harus menentukan _O_RDONLY, , _O_RDWRatau _O_WRONLY. Tidak ada nilai default untuk mode akses.

Jika _O_WTEXT digunakan untuk membuka file untuk dibaca, _open membaca awal file dan memeriksa tanda urutan byte (BOM). Jika ada BOM, file diperlakukan sebagai UTF-8 atau UTF-16LE, tergantung pada BOM. Jika tidak ada BOM, file diperlakukan sebagai ANSI. Ketika file dibuka untuk ditulis dengan menggunakan _O_WTEXT, UTF-16 digunakan. Terlepas dari pengaturan sebelumnya atau tanda urutan byte, jika _O_U8TEXT digunakan, file selalu dibuka sebagai UTF-8; jika _O_U16TEXT digunakan, file selalu dibuka sebagai UTF-16.

Ketika file dibuka dalam mode Unicode dengan menggunakan _O_WTEXTfungsi input , , _O_U8TEXTatau _O_U16TEXT, menerjemahkan data yang dibaca dari file ke dalam data UTF-16 yang disimpan sebagai jenis wchar_t. Fungsi yang menulis ke file yang dibuka dalam mode Unicode mengharapkan buffer yang berisi data UTF-16 yang disimpan sebagai jenis wchar_t. Jika file dikodekan sebagai UTF-8, maka data UTF-16 diterjemahkan ke dalam UTF-8 saat ditulis. Konten yang dikodekan UTF-8 file diterjemahkan ke dalam UTF-16 saat dibaca. Upaya untuk membaca atau menulis jumlah byte ganjil dalam mode Unicode menyebabkan kesalahan validasi parameter. Untuk membaca atau menulis data yang disimpan dalam program Anda sebagai UTF-8, gunakan mode teks atau file biner alih-alih mode Unicode. Anda bertanggung jawab atas terjemahan pengodean yang diperlukan.

Jika _open dipanggil dengan _O_WRONLY | _O_APPEND (mode tambahan) dan _O_WTEXT, , _O_U16TEXTatau _O_U8TEXT, pertama-tama mencoba membuka file untuk membaca dan menulis, baca BOM, lalu buka kembali untuk menulis saja. Jika membuka file untuk membaca dan menulis gagal, file hanya akan terbuka untuk menulis dan menggunakan nilai default untuk pengaturan mode Unicode.

Ketika dua atau beberapa konstanta manifes digunakan untuk membentuk oflag argumen, konstanta dikombinasikan dengan operator bitwise-OR ( | ). Untuk diskusi mode biner dan teks, lihat I/O file mode teks dan biner.

Argumen pmode hanya diperlukan ketika _O_CREAT ditentukan. Jika file sudah ada, pmode diabaikan. Jika tidak, pmode menentukan pengaturan izin file, yang diatur ketika file baru ditutup untuk pertama kalinya. _open menerapkan masker izin file saat ini ke pmode sebelum izin diatur. (Untuk informasi selengkapnya, lihat _umask.) pmode adalah ekspresi bilangan bulat yang berisi satu atau kedua konstanta manifes berikut, yang didefinisikan dalam <sys\stat.h>.

pmode Makna
_S_IREAD Hanya membaca yang diizinkan.
_S_IWRITE Penulisan diizinkan. (Berlaku, mengizinkan pembacaan dan penulisan.)
_S_IREAD | _S_IWRITE Membaca dan menulis diizinkan.

Ketika kedua konstanta diberikan, konstanta tersebut digabungkan dengan operator bitwise-OR ( | ). Di Windows, semua file dapat dibaca; izin tulis-saja tidak tersedia. Oleh karena itu, mode _S_IWRITE dan _S_IREAD | _S_IWRITE setara.

Jika nilai selain dari beberapa kombinasi _S_IREAD dan ditentukan untuk pmode—meskipun akan menentukan nilai yang valid pmode di sistem operasi lain—atau jika ada nilai selain nilai yang diizinkan oflag yang ditentukan, fungsi menghasilkan pernyataan dalam mode Debug dan memanggil handler parameter yang tidak valid, seperti yang dijelaskan dalam Validasi_S_IWRITE parameter. Jika eksekusi diizinkan untuk melanjutkan, fungsi mengembalikan -1 dan diatur errno ke EINVAL.

Persyaratan

Function Header yang diperlukan Header opsional
_open <io.h> <fcntl.h>, <sys\types.h>, <sys\stat.h>
_wopen <io.h> atau <wchar.h> <fcntl.h>, <sys\types.h>, <sys\stat.h>

_open dan _wopen merupakan ekstensi Microsoft. Untuk informasi kompatibilitas selengkapnya, lihat Kompatibilitas.

Pustaka

Semua versi pustaka run-time C.

Contoh

// crt_open.c
// compile with: /W3
/* This program uses _open to open a file
* named CRT_OPEN.C for input and a file named CRT_OPEN.OUT
* for output. The files are then closed.
*/
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <io.h>
#include <stdio.h>

int main( void )
{
   int fh1, fh2;

   fh1 = _open( "CRT_OPEN.C", _O_RDONLY ); // C4996
   // Note: _open is deprecated; consider using _sopen_s instead
   if( fh1 == -1 )
      perror( "Open failed on input file" );
   else
   {
      printf( "Open succeeded on input file\n" );
      _close( fh1 );
   }

   fh2 = _open( "CRT_OPEN.OUT",
                _O_WRONLY | _O_CREAT,
                _S_IREAD | _S_IWRITE ); // C4996
   if( fh2 == -1 )
      perror( "Open failed on output file" );
   else
   {
      printf( "Open succeeded on output file\n" );
      _close( fh2 );
   }
}

Hasil

Open succeeded on input file
Open succeeded on output file

Baca juga

I/O tingkat rendah
_chmod, _wchmod
_close
_creat, _wcreat
_dup, _dup2
fopen, _wfopen
_sopen, _wsopen