Ringkasan
#include
Deskripsi
ItuBuka() perintah system call linux digunakan untuk mengubah pathname menjadi file descriptor (bilangan bulat kecil, non-negatif untuk digunakan pada I / O berikutnya seperti Baca baca, menulis, dll.). Ketika panggilan berhasil, deskriptor file kembali akan menjadi file deskriptor terendah saat ini tidak terbuka untuk proses. Panggilan ini membuat file terbuka baru, tidak dibagikan dengan proses lainnya. (Tetapi file terbuka bersama mungkin muncul melaluigarpu(2) panggilan sistem.) File deskriptor baru diatur untuk tetap terbuka di seluruh fungsi exec (lihatfcntl(2)). Offset file diatur ke awal file.
Parameter bendera adalah salah satunyaO_RDONLY, O_WRONLY atauO_RDWR yang meminta membuka file hanya-baca, hanya-menulis atau membaca / menulis, masing-masing, bitwise- atau dengan nol atau lebih dari yang berikut:
O_CREAT
Jika file tidak ada maka akan dibuat. Pemilik (ID pengguna) dari file diatur ke ID pengguna yang efektif dari proses. Kepemilikan grup (ID grup) diatur ke ID grup yang efektif dari proses atau ke ID grup dari direktori induk (tergantung pada tipe filesystem dan opsi mount, dan mode direktori induk, lihat, misalnya, mount pilihan bsdgroups dan sysvgroup dari filesystem ext2, seperti yang dijelaskan dalammeningkat(8)).
O_EXCL
Saat digunakan denganO_CREAT, jika file sudah ada, itu adalah kesalahan danBuka akan gagal. Dalam konteks ini, ada hubungan simbolis, terlepas dari mana poinnya.O_EXCL rusak pada sistem file NFS, program yang mengandalkannya untuk melakukan tugas penguncian akan berisi kondisi balapan. Solusi untuk melakukan penguncian file atom menggunakan lockfile adalah untuk membuat file unik pada fs yang sama (misalnya, menggabungkan hostname dan pid), gunakan tautan (2) untuk membuat tautan ke lockfile. Jikalink() mengembalikan 0, kunci berhasil. Kalau tidak, gunakan stat(2) pada file unik untuk memeriksa apakah jumlah tautannya telah meningkat menjadi 2, dalam hal mana kunci juga berhasil.
O_NOCTTY
Jika nama jalan mengacu pada perangkat terminal --- lihattty(4) --- itu tidak akan menjadi terminal pengendali proses bahkan jika proses tidak memilikinya.
O_TRUNC
Jika file sudah ada dan merupakan file biasa dan mode terbuka memungkinkan penulisan (yaitu, O_RDWR atau O_WRONLY), maka akan dipotong menjadi panjang 0. Jika file tersebut adalah file perangkat FIFO atau terminal, bendera O_TRUNC diabaikan. Jika tidak, efek O_TRUNC tidak ditentukan. (Pada banyak versi Linux, akan diabaikan; pada versi lain, ini akan mengembalikan kesalahan.)
O_APPEND
File dibuka dalam mode tambahan. Sebelum masing-masingmenulis, file pointer diposisikan pada akhir file, seolah-olah denganlseek. O_APPEND dapat menyebabkan file rusak pada sistem file NFS jika lebih dari satu proses menambahkan data ke file sekaligus. Ini karena NFS tidak mendukung menambahkan file, sehingga kernel klien harus mensimulasikannya, yang tidak dapat dilakukan tanpa syarat balapan.
O_NONBLOCK atauO_NDELAY
Jika memungkinkan, file dibuka dalam mode non-blocking. Bukan keduanyaBuka atau operasi berikutnya pada deskriptor file yang dikembalikan akan menyebabkan proses panggilan untuk menunggu. Untuk penanganan FIFO (pipa bernama), lihat jugafifo(4). Mode ini tidak perlu berpengaruh pada file selain FIFO.
O_SYNC
File dibuka untuk I / O sinkron. Apa sajamenuliss pada deskriptor file yang dihasilkan akan memblokir proses pemanggilan sampai data telah secara fisik ditulis ke perangkat keras yang mendasarinya. Lihat PEMBATASAN di bawah ini.
O_NOFOLLOW
Jika nama jalan adalah tautan simbolis, lalu buka gagal. Ini adalah ekstensi FreeBSD, yang ditambahkan ke Linux dalam versi 2.1.126. Tautan simbolis di komponen sebelumnya dari pathname masih akan diikuti. Header dari glibc 2.0.100 dan kemudian menyertakan definisi dari bendera ini; kernel sebelum 2.1.126 akan mengabaikannya jika digunakan .
O_DIRECTORY
Jika nama jalan bukan direktori, menyebabkan open gagal. Bendera ini khusus untuk Linux, dan ditambahkan dalam versi kernel 2.1.126, untuk menghindari masalah penolakan-layanan jikaopendir(3) dipanggil pada FIFO atau perangkat tape, tetapi tidak boleh digunakan di luar implementasiopendir.
O_DIRECT
Cobalah untuk meminimalkan efek cache I / O ke dan dari file ini. Secara umum ini akan menurunkan kinerja, tetapi berguna dalam situasi khusus, seperti ketika aplikasi melakukan cache sendiri. File I / O dilakukan langsung ke / dari buffer ruang pengguna. I / O sinkron, yaitu, pada saat penyelesaian Baca baca(2) ataumenulis(2) panggilan sistem, data dijamin telah ditransfer. Ukuran transfer, dan penyelarasan buffer pengguna dan file offset semua harus kelipatan dari ukuran blok logis dari sistem file.Bendera ini didukung pada sejumlah sistem mirip Unix; Dukungan ditambahkan di Linux dalam versi kernel 2.4.10.Antarmuka semantis serupa untuk perangkat blok dijelaskan dalammentah(8). O_ASYNC Hasilkan sinyal (SIGIO secara default, tetapi ini dapat diubah melaluifcntl(2)) ketika input atau output menjadi mungkin pada pendeskripsi file ini. Fitur ini hanya tersedia untuk terminal, pseudo-terminal, dan soket. Lihatfcntl(2) untuk keterangan lebih lanjut. O_LARGEFILE Pada sistem 32-bit yang mendukung Sistem File Besar, izinkan file yang ukurannya tidak dapat diwakili dalam 31 bit untuk dibuka. Beberapa dari bendera opsional ini dapat diubah menggunakanfcntl setelah file dibuka. Argumen mode menentukan izin untuk digunakan jika file baru dibuat. Itu dimodifikasi oleh proses ituumask dengan cara yang biasa: izin dari file yang dibuat adalah(mode & ~ umask). Perhatikan bahwa mode ini hanya berlaku untuk akses masa depan file yang baru dibuat; ituBukapanggilan yang membuat file read-only mungkin mengembalikan deskriptor file baca / tulis. Konstanta simbolis berikut disediakan untuk mode : S_IRWXU 00700 pengguna (pemilik file) telah membaca, menulis, dan mengeksekusi izin S_IRUSR (S_IREAD) Pengguna 00400 telah membaca izin S_IWUSR (S_IWRITE) 00200 pengguna memiliki izin menulis S_IXUSR (S_IEXEC) 00100 pengguna telah mengeksekusi izin S_IRWXG 00070 grup telah membaca, menulis, dan mengeksekusi izin S_IRGRP Grup 00040 telah membaca izin S_IWGRP 00020 grup memiliki izin menulis S_IXGRP Kelompok 00010 telah mengeksekusi izin S_IRWXO 00007 lainnya telah membaca, menulis, dan mengeksekusi izin S_IROTH 00004 orang lain telah membaca izin S_IWOTH 00002 orang lain memiliki izin menulis S_IXOTH 00001 orang lain telah mengeksekusi izin mode harus ditentukan kapanO_CREAT ada di bendera , dan diabaikan sebaliknya. creat setara denganBuka dengan bendera sama denganO_CREAT | O_WRONLY | O_TRUNC. KEMBALIKAN NILAI Buka dancreat kembalikan deskriptor file baru, atau -1 jika terjadi kesalahan (dalam hal ini, errno diatur dengan tepat). Perhatikan ituBuka dapat membuka file khusus perangkat, tetapicreat tidak dapat membuatnya - gunakanmknod(2) sebagai gantinya. Pada sistem file NFS dengan pemetaan UID diaktifkan,Buka dapat mengembalikan deskriptor file, tetapi mis. Baca baca(2) permintaan ditolakEACCES. Ini karena klien melakukanBuka dengan memeriksa izin, tetapi pemetaan UID dilakukan oleh server setelah membaca dan menulis permintaan. Jika file baru dibuat, atime, ctime, bidang mtime-nya diatur ke waktu saat ini, dan begitu juga bidang ctime dan mtime dari direktori induk. Jika tidak, jika file tersebut dimodifikasi karena bendera O_TRUNC, bidang ctime dan mtime-nya diatur ke waktu saat ini. EEXIST nama jalan sudah ada danO_CREAT danO_EXCL telah dipakai. EISDIR nama jalan mengacu pada direktori dan akses yang diminta termasuk menulis (yaitu,O_WRONLY atauO_RDWR diatur). EACCES Akses yang diminta ke file tidak diizinkan, atau salah satu direktori di nama jalan tidak mengizinkan izin pencarian (eksekusi), atau file belum ada dan akses tulis ke direktori induk tidak diizinkan. ENAMETOOLONG nama jalan terlalu lama. ENOENT O_CREAT tidak disetel dan file yang dinamai tidak ada. Atau, komponen direktori di nama jalan tidak ada atau merupakan tautan simbolis yang menggantung. ENOTDIR Komponen yang digunakan sebagai direktori di nama jalan tidak, pada kenyataannya, direktori, atauO_DIRECTORYditentukan dan nama jalan bukan direktori. ENXIO O_NONBLOCK | O_WRONLY diatur, file yang bernama adalah FIFO dan tidak ada proses yang membuka file untuk dibaca. Atau, file adalah file khusus perangkat dan tidak ada perangkat yang sesuai. ENODEV nama jalan merujuk ke file khusus perangkat dan tidak ada perangkat yang sesuai. (Ini adalah bug kernel Linux - dalam situasi ini ENXIO harus dikembalikan.) EROFS nama jalan mengacu pada file pada sistem file read-only dan akses tulis diminta. ETXTBSY nama jalan mengacu pada gambar eksekusi yang saat ini sedang dieksekusi dan akses tulis diminta. EFAULT nama jalan menunjukkan di luar ruang alamat Anda yang dapat diakses. ELOOP Terlalu banyak tautan simbolis yang ditemukan dalam penyelesaian nama jalan , atauO_NOFOLLOW ditentukan tetapi nama jalan adalah tautan simbolis. ENOSPC nama jalan harus dibuat tetapi perangkat mengandung nama jalan tidak memiliki ruang untuk file baru. ENOMEM Memori kernel tidak cukup tersedia. EMFILE Proses sudah memiliki jumlah file maksimum yang terbuka. ENFILE Batas jumlah total file yang dibuka pada sistem telah tercapai. SVR4, SVID, POSIX, X / OPEN, BSD 4.3O_NOFOLLOW danO_DIRECTORY bendera adalah khusus untuk Linux. Seseorang mungkin harus mendefinisikan_GNU_SOURCE makro untuk mendapatkan definisi mereka. Ada banyak infelicities dalam protokol yang mendasari NFS, yang mempengaruhi antara lainO_SYNC danO_NDELAY. POSIX menyediakan untuk tiga varian yang berbeda dari I / O tersinkronisasi, sesuai dengan benderaO_SYNC , O_DSYNC dan O_RSYNC. Saat ini (2.1.130) ini semua identik di Linux. Kesalahan
Sesuai dengan
Batasan