_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_RDWR
atau _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_WTEXT
fungsi input , , _O_U8TEXT
atau _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_U16TEXT
atau _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
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