Linux komandasini ochish haqida bilib oling

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.