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 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 ANSI (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 _S_IWRITE—meskipun akan menentukan nilai yang valid pmode di sistem operasi lain—atau jika ada nilai selain nilai yang diizinkan pmode yang ditentukan, fungsi menghasilkan pernyataan dalam mode Debug dan memanggil handler parameter yang tidak valid, seperti yang dijelaskan dalam oflag parameter. Jika eksekusi diizinkan untuk melanjutkan, fungsi mengembalikan -1 dan diatur errno ke EINVAL.
Persyaratan
| Fungsi | 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 );
}
}
Output
Open succeeded on input file
Open succeeded on output file
Lihat juga
I/O tingkat rendah
_chmod, _wchmod
_close
_creat, _wcreat
_dup, _dup2
fopen, _wfopen
_sopen, _wsopen