Sinopsis
#include "A HREF =" fayl: /usr/include/sys/types.h "> system / types.h> #include" A HREF = "fayl: /usr/include/sys/stat.h"> sys / stat.h> #include "A HREF =" fayl: /usr/include/fcntl.h "> fcntl.h> int ochish (const char * pathname , int bayrog'i ); int ochish (const char * pathname , int bayrog'i , mode_t rejimi ); int creat (const char * pathname , mode_t rejimi );Ta'rif
Open () tizimning chaqiruvi linux komandasi yo'l nomini fayl identifikatoriga aylantirish uchun ishlatiladi ( o'qish , yozish , va hokazo kabi keyingi I / O'da ishlatish uchun kichik, noan'anaviy tamsayı). Chaqiruv muvaffaqiyatli bo'lganda fayl identifikatori ushbu jarayon uchun ochiq bo'lmagan eng kam fayl identifikatori bo'lib qaytib keldi. Ushbu chaqiruv boshqa hech qanday jarayon bilan almashilmaydigan yangi ochiq fayl hosil qiladi. (Lekin, birgalikdagi fayllar fork (2) tizim chaqiruvi orqali paydo bo'lishi mumkin). Yangi fayl identifikatori exec vazifalari bo'yicha ochiq qoladi ( fcntl (2) ga qarang). Fayl ofseti fayl boshiga o'rnatiladi.
Parametr bayrog'i O_RDONLY , O_WRONLY yoki O_RDWR bo'lib, u faylni faqat o'qish uchun, faqat yozish yoki o'qish / yozish uchun bitwise yoki d ni quyidagi yoki nolga teng:
O_CREAT
Agar fayl mavjud bo'lmasa, u tuziladi. Faylning egasi (foydalanuvchi identifikatori) jarayonning samarali foydalanuvchi identifikatoriga o'rnatiladi. Guruhning egaligi (guruh identifikatori) jarayonning samarali guruh identifikatoriga yoki yuqori katalog guruh identifikatoriga o'rnatiladi (fayl tizimi turi va o'rnatish parametrlariga va yuqori katalog rejasiga qarab, qarang. (8) da ko'rsatilganidek, ext2 fayl tizimining bsdgroups va sysvgroups imkoniyatlari.
O_EXCL
O_CREAT bilan foydalanilganda, fayl allaqachon mavjud bo'lsa, u xato va ochiq-oydin bo'ladi. Shu nuqtai nazardan, uning nuqtalari qaerda bo'lishidan qat'i nazar, ramziy bir aloqa mavjud. O_EXCL NFS fayl tizimlarida sinadi, qulflangan vazifalarni bajarish uchun unga tayanadigan dasturlarda poyga holati mavjud bo'ladi. Atrof fayllarini blokirovkalash orqali atom fayllarini qulflash uchun echim, bir xil fs-da (masalan, hostname va pid) noyob fayl yaratish, lockfile-ga bog'lanish uchun havolani (2) ishlatishdir. Agar link () 0ni qaytargan bo'lsa, qulflash muvaffaqiyatli bo'ladi. Aks holda, bog'lanish soni 2 ga ko'tarilganligini tekshirish uchun unikal faylga stat (2) dan foydalaning, bu holda qulf ham muvaffaqiyatli bo'ladi.
O_NOCTTY
Agar yo'lning terminali terminal qurilmasiga murojaat qilsa --- qarang tty (4) --- jarayonning bo'lmasa ham, jarayonning nazorat terminaliga aylanmaydi.
O_TRUNC
Agar fayl allaqachon mavjud bo'lsa va oddiy fayl bo'lsa va ochiq rejim yozilishiga imkon beradi (ya'ni, O_RDWR yoki O_WRONLY) bo'lsa, u uzunlik bilan uziladi. Agar fayl FIFO yoki terminalda qurilma fayli bo'lsa, O_TRUNC bayrog'i e'tiborsiz qilinadi. Aks holda O_TRUNC ta'siri aniqlanmagan. (Ko'pgina Linux versiyalarida e'tiborga olinmaydi, boshqa versiyalarda esa xato bo'ladi.)
O_APPEND
Fayl append rejimida ochiladi. Har bir yozishdan oldin, fayl ko'rsatgichlari faylning oxirida, xuddi lseek bilan joylashtirilgan . O_APPEND bir vaqtning o'zida bir nechta faylga faylga ma'lumotlarni qo'shsa , NFS fayl tizimlarida buzilgan fayllarga olib kelishi mumkin. Buning sababi, NFS faylga qo'shimchani qo'llab-quvvatlamaydi, shuning uchun mijozning yadrosi uni poyg bo'lish sharti bilan amalga oshirmasdan taqsimlashi kerak.
O_NONBLOCK yoki O_NDELAY
Mumkin bo'lsa, fayl blokirovka rejimida ochiladi. Qaytariladigan fayl identifikatoridagi ochiq yoki undan keyingi operatsiyalar chaqiruv jarayonini kutishga sabab bo'ladi. FIFO'larning ishlashi uchun (nomlangan quvurlar), shuningdek fifo (4) ga qarang. Ushbu rejim FIFOdan boshqa fayllarga ta'sir qilmasligi kerak.
O_SYNC
Sinxron G / Ç uchun fayl ochiladi. Olingan fayl identifikatorida har qanday yozib olish jarayoni ma'lumotlar jismonan asosiy apparatga yozilmaguncha qo'ng'iroq qilish jarayonini bloklaydi. Quyida ko'rsatilgan cheklashlarga qarang.
O_NOFOLLOW
Yo'l nomi ramziy aloqa bo'lsa, unda ochiq-oydin bajarilmaydi. Bu 2.1.126 versiyasida Linuxga qo'shilgan FreeBSD kengaytmasi. Yo'lning oldingi tarkibiy qismlarida ramziy havolalar hali ham ta'qib qilinadi. Glibc 2.0.100 va undan keyingi versiyalarda ushbu bayroqning ta'rifi mavjud; 2.1.126 dan oldin yadrolar foydalanilsa, uni e'tiborsiz qoldiradi .
O_DIRECTORY
Yo'l nomlari katalog bo'lmasa, ochiq bajarilmasligiga sabab bo'ladi. Ushbu bayroq Linuxga xosdir va agar opendir (3) FIFO yoki lenta qurilmasiga chaqirilsa, xizmat ko'rsatishdan bosh tortish muammolarini bartaraf etish uchun 2.1.126 yadro versiyasiga qo'shilgan, ammo opendir .
O_DIRECT
Ushbu faylga I / U keshining ta'sirini kamaytirishga harakat qiling. Umuman olganda, bu ishlashni pasaytiradi, ammo amaliy dasturlar maxsus keshlashda foydalidir. Fayl g / Çsi foydalanuvchi kosmik bufferlaridan to'g'ridan-to'g'ri / amalga oshiriladi. G / Ç sinxronlashtiriladi, ya'ni o'qish (2) yoki yozish (2) tizim chaqiruvi tugallanganda ma'lumotlar uzatilganligi kafolatlanadi. Tranzaktsiyalarning o'lchami va foydalanuvchi bufer va faylning ofsetining hizalamasi fayl tizimining mantiqiy blok o'lchami kattaligi bo'lishi kerak.
Ushbu bayroq Unix-shunga o'xshash tizimlarda qo'llab-quvvatlanadi; Linux versiyasi 2.4.10 versiyasida qo'llab-quvvatlash qo'shildi.
Block qurilmalar uchun semantik jihatdan o'xshash interfeys xom (8) tavsiflanadi.
O_ASYNC
Ushbu fayl identifikatorida kirish yoki chiqish imkoni bo'lgan signalni yaratish (SIGIO sukut bo'yicha, lekin fcntl (2) orqali o'zgartirilishi mumkin). Bu xususiyat faqat terminallar, pseudo-terminallar va rozetkalar uchun mavjud. Qo'shimcha ma'lumot uchun fcntl (2) ga qarang.
O_LARGEFILE
Katta Fayllar tizimini qo'llab-quvvatlaydigan 32-bitli tizimlarda fayllar hajmi 31 baytda ochilishi mumkin bo'lmagan fayllarga ruxsat berish.
Ushbu ixtiyoriy bayroqlardan ba'zilari fayl ochilgandan so'ng fcntl yordamida o'zgartirilishi mumkin.
Argumentlar rejimi yangi fayl yaratilganda foydalanish uchun ruxsatlarni belgilaydi. Jarayonning umaskasi odatiy tarzda o'zgartiriladi: yaratilgan faylning ruxsatnomalari (mode & ~ umask) . Ushbu rejim faqat yangi yaratilgan faylning kelgusidagi kirishlari uchun amal qiladi; faqat o'qish uchun mo'ljallangan fayl yaratadigan ochiq qo'ng'iroq o'qish / yozish fayl identifikatorini qaytarishi mumkin.
Quyidagi ramziy sobit rejim uchun taqdim etilgan:
S_IRWXU
00700 foydalanuvchi (fayl egasi) o'qish, yozish va ruxsat olishni amalga oshirdi
S_IRUSR (S_IREAD)
00400 foydalanuvchi o'qish ruxsatiga ega
S_IWUSR (S_IWRITE)
00200 foydalanuvchining yozma roziligi mavjud
S_IXUSR (S_IEXEC)
00100 foydalanuvchi ruxsat olish huquqiga ega
S_IRWXG
00070 guruhi o'qish, yozish va ruxsat olishni amalga oshirdi
S_IRGRP
00040 guruhining o'qish ruxsatnomasi mavjud
S_IWGRP
00020 guruhiga yozma ruxsat mavjud
S_IXGRP
00010 guruhi ruxsat olishni amalga oshirdi
S_IRWXO
00007 kishi boshqalarni o'qish, yozish va ijro etish huquqiga ega
S_IROTH
00004 kishi o'qish ruxsatiga ega
S_IWOTH
00002 kishi boshqasiga yozma ruxsatnoma oladi
S_IXOTH
00001 kishi ruxsat olish huquqiga ega
O_CREAT belgilari bayroqlarda bo'lsa , u holda tartib belgilanishi kerak va aks holda e'tiborga olinmaydi.
CREATE O_CREAT | O_WRONLY | O_TRUNC ga teng bayroqlar bilan ochiq bo'lishi kerak .
Qaytaring VALUE
ochiq va yaratilgan yangi fayl identifikatorini qaytarish yoki xatolik yuzaga kelsa -1 (bu holda, errno mos ravishda o'rnatilgandir). Ayniqsa, qurilma maxsus fayllarni ochishi mumkin, ammo yaratuvchi ularni yarata olmaydi - buning o'rniga mknod (2) dan foydalaning.
UID xaritalashni ta'minlaydigan NFS fayl tizimlarida ochiq , fayl identifikatorini qaytarishi mumkin, lekin masalan, o'qish (2) talablari EACCES bilan rad etilishi mumkin . Buning sababi, mijoz ruxsatini tekshirish orqali ochiq ishlaydi, lekin UID xaritalashni o'qish va yozish so'rovlari ustiga server tomonidan amalga oshiriladi.
Fayl yangi yaratilgan bo'lsa, uning atime, ctime, mtime maydonchalari joriy vaqtga o'rnatiladi va ota-katalogning ctime va mtime sohalari ham shunday. Aks holda, agar fayl O_TRUNC bayrog'i tufayli o'zgartirilsa, uning ctime va mtime maydonchalari joriy vaqtga o'rnatiladi.
Xatolar
EEXIST
yo'l nomi allaqachon mavjud va O_CREAT va O_EXCL ishlatilgan.
EISDIR
pathname bir katalogga va kerakli ruxsat yozishni talab qiladi (ya'ni, O_WRONLY yoki O_RDWR belgilanadi).
EACCES
Faylga kirish uchun ruxsat berilmaydi yoki yo'l nomidagi kataloglardan biri qidiruv (bajarish) ruxsatiga ruxsat bermadi yoki fayl hali mavjud emas va yuqori katalogga ruxsat berilmaydi.
ENAMETOOLONG
Yo'l nomi juda uzun.
ENOENT
O_CREAT o'rnatilmagan va nomlangan fayl mavjud emas. Yoki yo'l nomidagi katalog komponenti mavjud emas yoki simvolik bog'lanish mavjud.
ENOTDIR
Yo'lda katalog sifatida ishlatiladigan komponent, aslida, bir katalog yoki O_DIRECTORY ko'rsatilmagan va pathname katalog emas edi.
ENXIO
O_NONBLOCK | O_WRONLY belgilanadi, nom berilgan fayl FIFO va hech qanday jarayonda fayl o'qish uchun ochiqdir. Yoki, fayl qurilma maxsus fayl va mos keluvchi qurilma mavjud emas.
ENODEV
pathname qurilma maxsus faylga mos keladi va mos keluvchi qurilma mavjud emas. (Bu Linux yadrosi bugri - bu holatda ENXIO qaytarilishi kerak.)
EROFS
pathname faqat o'qiladi fayl tizimidagi faylga ishora qiladi va yozish uchun ruxsat so'raldi.
ETXTBSY
pathname amalga oshirilayotgan executable tasvirni bildiradi va yozish uchun ruxsat so'raladi.
EFAULT
Sizning kirish manzilingiz doirasidan tashqarida parollarni kiriting.
ELOOP
Yo'lning nomini o'zgartirishda juda ko'p ramziy havolalar uchradi yoki O_NOFOLLOW ko'rsatildi, ammo yo'lning ramziy havolasi edi.
ENOSPC
pathname yaratilishi kerak edi, lekin pathname o'z ichiga olgan qurilma yangi fayl uchun joy yo'q.
ENOMEM
Kam yadro xotirasi mavjud edi.
EMFILE
Jarayon allaqachon ochilgan maksimal faylga ega.
ENFILE
Tizimda ochilgan jami fayllar soniga erishildi.
Muvofiq
SVr4, SVID, POSIX, X / OPEN, UX 4.3 O_NOFOLLOW va O_DIRECTORY bayrog'i Linux-ga xosdir. O'z ta'riflarini olish uchun _GNU_SOURCE makrosini aniqlash kerak bo'ladi.
Cheklovlar
NFS asosidagi protokolda O_SYNC va O_NDELAY boshqalarga ta'sir qiladigan ko'plab infelicities mavjud.
POSIX, O_SYNC , O_DSYNC va O_RSYNC bayroqlariga mos keladigan sinxronlashtirilgan I / U uch xil variantini taqdim etadi. Hozirgi vaqtda (2.1.130), Linux operatsion tizimi ostida sinxronlashtiriladi.