Sinopsis
#include
Penerangan
Thebuka() perintah panggilan linux sistem digunakan untuk menukar nama laluan menjadi deskriptor fail (integer kecil, tidak negatif untuk digunakan dalam I / O berikutnya seperti baca, tulis, dan lain-lain.). Apabila panggilan berjaya, deskriptor fail yang dikembalikan akan menjadi deskriptor fail paling rendah yang tidak dibuka untuk proses ini. Panggilan ini mewujudkan fail terbuka baru, tidak dikongsi dengan sebarang proses lain. (Tetapi fail terbuka yang dikongsi mungkin timbul melaluigarpu(2) panggilan sistem.) Penjelasan fail baru ditetapkan untuk kekal terbuka merentas fungsi pelaksanaan (lihatfcntl(2)). Offset fail ditetapkan ke permulaan fail.
Parameter tersebut bendera adalah salah satuO_RDONLY, O_WRONLY atauO_RDWR yang meminta pembukaan fail hanya baca, tulis sahaja atau baca / tulis, masing-masing, bitwise- atau 'd dengan sifar atau lebih daripada yang berikut:
O_CREAT
Jika fail tidak wujud, ia akan diwujudkan. Pemilik (ID pengguna) fail disetkan kepada ID pengguna yang berkesan dalam proses tersebut. Pemilikan kumpulan (ID kumpulan) ditetapkan sama dengan ID kumpulan proses yang efektif atau kepada ID kumpulan direktori induk (bergantung pada jenis sistem fail dan pilihan gunung, dan mod direktori induk, lihat, contohnya, pemasangan pilihan bsdgroups dan sysvgroups daripada sistem fail ext2, seperti yang diterangkan dalamgunung(8)).
O_EXCL
Apabila digunakan denganO_CREAT, jika fail sudah wujud, ia adalah ralat danbuka akan gagal. Dalam konteks ini, terdapat pautan simbolik, tidak kira di mana titiknya.O_EXCL dipecahkan pada sistem fail NFS, program yang bergantung kepadanya untuk melaksanakan tugas mengunci akan mengandungi keadaan perlumbaan. Penyelesaian untuk melakukan penguncian fail atom menggunakan fail lock adalah untuk membuat fail unik pada fs yang sama (mis., Memasukkan nama hos dan pid), gunakan pautan (2) untuk membuat pautan ke fail kunci. Jikapautan () mengembalikan 0, kunci berjaya. Jika tidak, gunakan stat(2) pada fail yang unik untuk memeriksa sama ada kiraan pautannya telah meningkat kepada 2, di mana kunci juga berjaya.
O_NOCTTY
Jika nama laluan merujuk kepada peranti terminal --- lihattty(4) --- ia tidak akan menjadi terminal pengendalian proses walaupun proses itu tidak mempunyai satu.
O_TRUNC
Jika fail tersebut sudah wujud dan merupakan fail biasa dan mod terbuka membolehkan penulisan (iaitu, O_RDWR atau O_WRONLY), ia akan dipangkas kepada panjang 0. Jika fail itu adalah fail peranti FIFO atau terminal, bendera O_TRUNC diabaikan. Jika tidak, kesan O_TRUNC tidak ditentukan. (Pada banyak versi Linux ia akan diabaikan, pada versi lain, ia akan mengembalikan ralat.)
O_APPEND
Fail dibuka dalam mod tambah. Sebelum setiaptulis, penuding fail diletakkan pada akhir fail, seolah-olah denganlseek. O_APPEND boleh menyebabkan fail rosak pada sistem fail NFS jika lebih daripada satu proses menambah data ke fail sekaligus. Ini kerana NFS tidak menyokong menambah fail, jadi kernel pelanggan perlu mensimulasikannya, yang tidak boleh dilakukan tanpa keadaan perlumbaan.
O_NONBLOCK atauO_NDELAY
Apabila mungkin, fail dibuka dalam mod tidak menyekat. Tidakbuka atau sebarang operasi selanjutnya pada deskriptor fail yang dikembalikan akan menyebabkan proses panggilan menunggu. Untuk pengendalian FIFO (bernama paip), lihat jugafifo(4). Mod ini tidak mempunyai kesan ke atas fail selain FIFO.
O_SYNC
Fail dibuka untuk sinkron I / O. Mana-manatuliss pada deskriptor fail yang terhasil akan menyekat proses panggilan sehingga data telah ditulis secara fizikal ke perkakasan yang mendasari. Lihat RESTRIKTIONS di bawah, walaupun.
O_NOFOLLOW
Jika nama laluan adalah pautan simbolik, maka terbuka gagal. Ini adalah sambungan FreeBSD, yang telah ditambah ke Linux dalam versi 2.1.126. Pautan simbolik dalam komponen awal nama laluan masih akan diikuti. Tajuk dari glibc 2.0.100 dan kemudian termasuk definisi bendera ini; kernel sebelum 2.1.126 akan mengabaikannya jika digunakan .
O_DIRECTORY
Jika nama laluan bukan direktori, menyebabkan terbuka gagal. Bendera ini adalah khusus Linux, dan telah ditambah dalam versi kernel 2.1.126, untuk mengelakkan masalah penafian jikaopendir(3) dipanggil pada FIFO atau peranti pita, tetapi tidak boleh digunakan di luar pelaksanaanopendir.
O_DIRECT
Cuba untuk meminimumkan kesan cache dari I / O ke dan dari fail ini. Umumnya ini akan merendahkan prestasi, tetapi berguna dalam situasi khusus, seperti ketika aplikasi melakukan caching sendiri. Fail I / O dilakukan secara langsung ke / dari penampan ruang pengguna. I / O adalah segerak, iaitu, selesainya baca(2) atautulis(2) panggilan sistem, data dijamin telah dipindahkan. Saiz perpindahan, dan penyesuaian penampan pengguna dan fail offset mesti semua kelipatan saiz blok logik sistem fail.Bendera ini disokong pada beberapa sistem seperti Unix; sokongan telah ditambah di bawah Linux dalam versi kernel 2.4.10.Antaramuka semantik yang serupa untuk peranti blok diterangkan dalammentah(8). O_ASYNC Menjana isyarat (SIGIO secara lalai, tetapi ini boleh diubah melaluifcntl(2)) apabila input atau output menjadi mungkin pada deskriptor fail ini. Ciri ini hanya tersedia untuk terminal, pseudo-terminal, dan soket. Lihatfcntl(2) untuk maklumat lanjut. O_LARGEFILE Pada sistem 32-bit yang menyokong Sistem Fail Besar, membenarkan fail yang saiznya tidak boleh diwakili dalam 31 bit yang akan dibuka. Beberapa bendera pilihan ini boleh diubah menggunakanfcntl selepas fail telah dibuka. Hujah mod menentukan kebenaran untuk digunakan sekiranya fail baru dibuat. Ia diubah suai oleh proses ituumask dengan cara yang biasa: keizinan fail yang dibuat adalah(mod & ~ umask). Ambil perhatian bahawa mod ini hanya terpakai untuk akses masa depan fail yang baru dibuat; yangbukapanggilan yang mencipta fail baca-hanya boleh mengembalikan deskriptor fail baca / tulis. Pemalar simbolik berikut disediakan untuk mod : S_IRWXU 00700 pengguna (pemilik fail) telah membaca, menulis dan melaksanakan kebenaran S_IRUSR (S_IREAD) 00400 pengguna telah membaca kebenaran S_IWUSR (S_IWRITE) 00200 pengguna mempunyai kebenaran menulis S_IXUSR (S_IEXEC) 00100 pengguna telah melaksanakan kebenaran S_IRWXG Kumpulan 00070 telah membaca, menulis dan melaksanakan kebenaran S_IRGRP Kumpulan 00040 telah membaca kebenaran S_IWGRP Kumpulan 00020 mempunyai izin menulis S_IXGRP Kumpulan 00010 telah melaksanakan izin S_IRWXO 00007 yang lain telah membaca, menulis dan melaksanakan kebenaran S_IROTH 00004 yang lain telah membaca kebenaran S_IWOTH 00002 yang lain mempunyai kebenaran menulis S_IXOTH 00001 yang lain mempunyai kebenaran melaksanakan mod mesti dinyatakan ketikaO_CREAT terdapat dalam bendera , dan diabaikan sebaliknya. creat bersamaan denganbuka dengan bendera sama denganO_CREAT | O_WRONLY | O_TRUNC. NILAI NILAI buka dancreat kembalikan deskriptor fail baru, atau -1 jika terjadi ralat (dalam hal ini, errno ditetapkan dengan betul). Perhatikan bahawabuka boleh membuka fail khas peranti, tetapicreat tidak boleh membuatnya - gunakanmknod(2) sebaliknya. Pada sistem fail NFS dengan pemetaan UID diaktifkan,buka boleh mengembalikan deskriptor fail tetapi mis. baca(2) permintaan ditolakEACCES. Ini kerana pelanggan melakukanbuka dengan memeriksa kebenaran, tetapi pemetaan UID dilakukan oleh pelayan apabila membaca dan menulis permintaan. Jika fail baru dibuat, medan atime, ctime, mtime ditetapkan pada masa kini, dan begitu juga medan ctime dan mtime direktori induk. Jika tidak, jika fail diubahsuai kerana bendera O_TRUNC, medan ctime dan mtime ditetapkan pada masa semasa. EEXIST nama laluan sudah wujud danO_CREAT danO_EXCL digunakan. EISDIR nama laluan merujuk kepada direktori dan akses yang diminta melibatkan penulisan (iaitu,O_WRONLY atauO_RDWR ditetapkan). EACCES Akses yang diminta ke fail tidak dibenarkan, atau salah satu direktori masuk nama laluan tidak membenarkan kebenaran carian (laksanakan), atau fail belum lagi dan tulis akses ke direktori induk tidak dibenarkan. ENAMETOOLONG nama laluan terlalu lama. ENOENT O_CREAT tidak ditetapkan dan fail bernama tidak wujud. Atau, komponen direktori dalam nama laluan tidak wujud atau pautan simbol yang menggantung. ENOTDIR Satu komponen yang digunakan sebagai direktori dalam nama laluan sebenarnya bukan direktori, atauO_DIRECTORYtelah ditentukan dan nama laluan bukan direktori. ENXIO O_NONBLOCK | O_WRONLY ditetapkan, fail bernama adalah FIFO dan tiada proses yang membuka fail untuk membaca. Atau, fail itu adalah fail khas peranti dan tiada peranti yang bersesuaian. ENODEV nama laluan merujuk kepada fail khas peranti dan tiada peranti yang bersesuaian. (Ini adalah bug kernel Linux - dalam keadaan ini ENXIO mesti dikembalikan.) EROFS nama laluan merujuk kepada fail pada sistem fail baca sahaja dan akses tulis diminta. ETXTBSY nama laluan merujuk kepada imej yang boleh laku yang sedang dilaksanakan dan akses tulis diminta. EFAULT nama laluan mata di luar ruang alamat yang boleh diakses anda. ELOOP Terlalu banyak pautan simbolik yang dihadapi dalam menyelesaikannya nama laluan , atauO_NOFOLLOW telah ditentukan tetapi nama laluan adalah pautan simbolik. ENOSPC nama laluan akan dibuat tetapi peranti yang mengandungi nama laluan tidak mempunyai ruang untuk fail baru. ENOMEM Memori kernel tidak mencukupi tersedia. EMFILE Proses sudah mempunyai bilangan maksimum fail terbuka. ENFILE Had jumlah keseluruhan fail yang dibuka pada sistem telah dicapai. SVr4, SVID, POSIX, X / OPEN, BSD 4.3O_NOFOLLOW danO_DIRECTORY bendera adalah khusus Linux. Satu mungkin perlu mentakrifkan_GNU_SOURCE makro untuk mendapatkan takrifan mereka. Terdapat banyak kecacatan dalam protokol yang mendasari NFS, yang mempengaruhi antara lainO_SYNC danO_NDELAY. POSIX menyediakan tiga varian berbeza I / O yang disegerakkan, sepadan dengan benderaO_SYNC , O_DSYNC dan O_RSYNC. Pada masa ini (2.1.130) ini semua sinonim di bawah Linux. Kesilapan
Bertepatan dengan
Sekatan




