Sinopsis
#include "A HREF =" faylı: /usr/include/sys/types.h "> sys / 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 açıq (const char * pathname , int bayraqları ); int açıq (const char * pathname , int bayraqları , mode_t rejimi ); int creat (const char * pathname, mode_t rejimi );Təsvir
Açıq () sistem çağırışı linux komutu , bir yolun bir fayl təsvirinə çevrilməsi üçün istifadə olunur ( oxumaq , yazmaq və s. Kimi sonrakı I / O istifadə üçün kiçik, qeyri-mənfi tam sayını). Zəngin müvəffəqiyyətə çatdıqda fayl tanımlayıcısı bu proses üçün hazırda açılmayan ən aşağı fayl təsvirçisi olaraq geri qaytarılır. Bu zəng başqa bir proseslə paylaşılmayan yeni bir açıq fayl yaradır. (Lakin paylaşılan açıq fayllar fork (2) sistem çağırışı ilə yarana bilər). Yeni fayl təsvirçisi exec funksiyaları arasında açıq qalır (bax fcntl (2)). Faylın ofseti faylın başlanğıcına təyin olunur.
Parametr bayraqları O_RDONLY , O_WRONLY və ya O_RDWR-dən ibarətdir, bu faylın yalnız oxunan, yalnız yazma və ya oxumaq / yazmağı tələb etməsi, bitseksiyası və ya d aşağıda göstərilənlərin sıfır və ya daha çox olması:
O_CREAT
Fayl yoxdursa, yaradılacaq. Faylın sahibi (istifadəçi kimliyi) prosesin effektiv istifadəçi kimliyinə təyin olunur. Qrupun mülkiyyəti (qrup ID) prosesin effektiv qrupu kimliyinə və ya üst kataloqun qrup şəxsiyyətinə (fayl sistemi növü və quraşdırma variantları və üst qovluğun rejimi, bax: variantları bsdgroups və ext2 fayl sisteminin sysvgroups , mount (8)).
O_EXCL
O_CREAT ilə istifadə edildikdə , fayl zaten varsa, bu bir səhvdir və açıq olur . Bu kontekstdə, onun nöqtələrindən asılı olmayaraq, simvolik bir əlaqə mövcuddur. O_EXCL NFS fayl sistemlərində sındırıldı, kilidləmə vəzifələrini yerinə yetirmək üçün ona güvənən proqramlar yarış şərtlərini ehtiva edir. Bir kilidləmə faylını istifadə edərək atom faylının kilidlənməsi üçün həll eyni fs-də (məsələn, hostname və pid daxil olmaqla) unikal bir fayl yaratmaq, kilidlənmə ilə əlaqə yaratmaq üçün link (2) istifadə etməkdir. Link () 0 qaytarırsa, kilid müvəffəqiyyətlidir. Əks halda, linkin sayının 2-ə yüksəldiyini yoxlamaq üçün unikal faylda stat (2) istifadə edin, bu halda kilid də uğurludur.
O_NOCTTY
Yol adı terminal cihazına istinad edirsə --- baxın tty (4) --- prosesin yoxluğuna baxmayaraq prosesin nəzarət terminalı olmayacaqdır.
O_TRUNC
Fayl zaten var və normal bir fayldır və açıq rejimi yazmağa imkan verir (yəni, O_RDWR və ya O_WRONLY) 0 uzunluğuna qədər kəsiləcək. Fayl FIFO və ya terminal qurğusudursa, O_TRUNC bayrağı göz ardı edilir. Əks halda, O_TRUNC təsiri dəqiqləşdirilmir. (Bir çox Linux versiyasında itkin düşəcək, digər versiyalarda bir səhv qaytaracaq.)
O_APPEND
Fayl append rejimində açılır. Hər yazmadan əvvəl, fayl göstəricisi, lseek ilə olduğu kimi, faylın sonunda yerləşdirilir. O_APPEND, birdən çox proses bir anda bir faylya məlumat əlavə edərsə, NFS fayl sistemlərində zədələnmiş fayllara yol aça bilər. Çünki NFS bir faylya əlavəni dəstəkləmir, ona görə də müştəri çekirdeği bir yarış vəziyyəti olmadan həyata keçirə bilmədi.
O_NONBLOCK və ya O_NDELAY
Mümkün olduqda, fayl qeyri-blocker rejimində açılır. Qaytarılmayan fayl təsvirində nə açıq, nə də sonrakı əməliyyatlar çağırış prosesini gözləməyə səbəb olacaq. FIFOların (adlandırılmış boruların) işlənməsi üçün də beşi (4) -ə baxın. Bu rejim FIFO-dan başqa fayllara təsir göstərməməlidir.
O_SYNC
Fayl sinxron I / O üçün açılır. Nəticədə olan fayl descriptoruna yazılan hər hansı bir məlumat, data fiziki olaraq əsas donanmaya yazılana qədər axtarış prosesini blok edəcək. Baxmayaraq aşağıda baxın.
O_NOFOLLOW
Pathname simvolik bir keçiddirsə , onda uğursuz olur. Bu, 2.1.126 versiyasında Linux-a əlavə olan FreeBSD uzadılmasıdır. Yolun əvvəlki komponentlərində simvolik əlaqələr hələ də təqib olunacaq. Glibc 2.0.100-dən başlıqlar və daha sonra bu bayrağın tərifi daxildir; 2.1.126-dən əvvəl kernellər istifadə edildikdə onu görməyəcəkdir .
O_DIRECTORY
Pathname bir qovluq deyilsə, açıq olana səbəb olur. Bu bayraq Linux- una uyğun və opendir (3) bir FIFO və ya tape qurğusuna çağırılırsa, lakin opendirin tətbiqindən kənarda istifadə edilməməsi halında, .
O_DIRECT
I / O'nin önbellek effektlərini bu fayldan və bu fayldan asılı olaraq azaltmağa çalışın. Ümumiyyətlə bu, performansı azaldır, ancaq xüsusi hallarda faydalıdır, məsələn, ərizələr öz caching'lərini aparır. Fayl I / O , istifadəçi kosmik tamponlarından birbaşa həyata keçirilir. I / O sinxron, yəni oxumaq (2) və ya sistem çağırışının yazılmasından sonra məlumatların köçürülməsi təmin edilir. Transfer ölçüsü və istifadəçi tamponun və faylın ofsetinin hizalanması fayl sisteminin mantıksal blok ölçüsünün çoxluğu olmalıdır.
Bu bayraq bir sıra Unix kimi sistemlərdə dəstəklənir; dəstəyi Linux altında 2.4.10 versiyası əlavə edildi.
Block cihazlar üçün semantically oxşar bir interfeys xammal (8) təsvir olunur.
O_ASYNC
Bir siqnal yaradın (SIGIO default olaraq, lakin fcntl (2) ilə dəyişdirilə bilər) giriş və ya çıxış bu fayl descriptorunda mümkün olardı. Bu xüsusiyyət yalnız terminallar, pseudo-terminallar və yuvalar üçün mümkündür. Daha ətraflı məlumat üçün fcntl (2) -yə baxın.
O_LARGEFILE
Böyük Dosyalar Sistemini dəstəkləyən 32 bit sistemlərdə 31 bitdə açılmayan faylları təqdim etməyə imkan verin.
Faylın açılmasından sonra bu isteğe bağlı bayraqlardan bəziləri fcntl istifadə edərək dəyişdirilə bilər.
Müqavilə rejimi yeni bir fayl yaradıldığında istifadə etmək icazələrini müəyyənləşdirir. Prosedurun umaskası ilə adi şəkildə dəyişir: yaradılmış faylın icazələri (rejimi & umask) . Qeyd edək ki, bu rejim yalnız yeni yaradılan faylın gələcək çıxışlarına tətbiq edilir; yalnız oxunan bir fayl yaradan açıq zəng, bir oxumaq / yazma fayl təsvirini yaxşı qaytara bilər.
Aşağıdakı sembolik sabitlər rejimi təmin edir:
S_IRWXU
00700 istifadəçi (fayl sahibi) oxumaq, yazmaq və icazəni icra edir
S_IRUSR (S_IREAD)
00400 istifadəçisinin oxumaq icazəsi var
S_IWUSR (S_IWRITE)
00200 istifadəçisinin yazmaq icazəsi var
S_IXUSR (S_IEXEC)
00100 istifadəçisinin icazəsi var
S_IRWXG
00070 qrupu, oxumaq, yazmaq və icazəni icra edir
S_IRGRP
00040 qrupu oxudu
S_IWGRP
00020 qrupu yazmaq icazəsi var
S_IXGRP
00010 qrupu icazə verməkdədir
S_IRWXO
00007 nəfər oxudu, yazıb icra etdi
S_IROTH
00004 nəfər oxumaq icazəsi var
S_IWOTH
00002 nəfərin yazı icazəsi var
S_IXOTH
00001 başqasının icazəsi var
O_CREAT bayraqlarda olduğunda rejimi göstərilməlidir və başqa hal nəzərdə tutulmur .
yaradın, O_CREAT | O_WRONLY | O_TRUNC'a bərabər olan bayraqlarla açılmağa bərabərdir.
RETURN VALUE
açıq və yaradıcı yeni fayl təsvirçisini qaytarır, yaxud bir səhv baş verərsə -1 (bu halda, errno düzgün müəyyən edilir). Açıq cihazın xüsusi faylları aça bilər, lakin yaradıcı onları yaratmaq mümkün deyil - əvəzinə mknod (2) istifadə edin.
UID Xəritəçəkmə sistemi ilə işləyən NFS fayl sistemlərində açıq bir fayl təsvirçisi qayıda bilər, ancaq oxumaq (2) istəkləri EACCES ilə rədd edilir . Müştərinin izinleri denetleyerek açar , çünki UID eşleme server tarafından okuma ve yazma istekleri üzerine gerçekleştirilir.
Fayl yeni yaradılıbsa, atim, ctime, mtime sahələri cari vaxta təyin olunur və üst dizinin ctime və mtime sahələri belədir. Əks halda, fayl O_TRUNC bayrağından görə dəyişdirilirsə, onun ctime və mtime sahələri cari dəfə müəyyən edilir.
Səhvlər
EEXIST
yol adı artıq mövcuddur və O_CREAT və O_EXCL istifadə edilmişdir.
EISDIR
Yol adı bir qovluğa istinad edir və istənilən yazı (yəni, O_WRONLY və ya O_RDWR təyin olunur) daxildir.
EACCES
Dosyaya istənilən girişə icazə verilmir və ya yol adı içindəki dizinlerden birinə axtarış (icra etmə) icazəsinə icazə verilmədi və ya fayl hələ mövcud deyil və üst kataloqa giriş icazəsinə icazə verilmir.
ENAMETOOLONG
yol adı çox uzun idi.
ENOENT
O_CREAT deyil və adlanan fayl yoxdur. Və ya, yol adı bir kataloq komponenti yoxdur və ya dangling bir simvolik link.
ENOTDIR
Yollardaki bir kataloq kimi istifadə olunan bir komponent, əslində, bir qovluq deyil və ya O_DIRECTORY göstərilmişdir və pathname bir qovluq deyildir.
ENXIO
O_NONBLOCK | O_WRONLY müəyyən edilir, adlandırılmış fayl FIFO və heç bir proses fayl oxumaq üçün açıq deyil. Yoxsa fayl xüsusi bir fayldır və heç bir uyğun cihaz yoxdur.
ENODEV
Yol adı bir cihazın xüsusi faylına aiddir və müvafiq cihaz yoxdur. (Bu Linux kernel səhvidir - bu vəziyyətdə ENXIO qaytarılmalıdır.)
EROFS
Yol məlumatı yalnız bir fayl sisteminə aiddir və yazma imkanı tələb edildi.
ETXTBSY
yol adı hazırda yerinə yetirilən bir yürütülebilir görüntüyə aiddir və yazma imkanı tələb olunur.
EFAULT
gedən ünvan məkanı xaricində yol məlumatları .
ELOOP
Yol adını həll etmək üçün çoxlu sembolik linklər rast gəlindi və ya O_NOFOLLOW göstərildi, lakin yol adı simvolik bir link idi.
ENOSPC
Yol adı yaradılıb, lakin yol adı olan cihaz yeni fayl üçün yer qoymur .
ENOMEM
Kernel yaddaşının çatışmazlığı mövcud idi.
EMFILE
Proses artıq faylların maksimum sayına malikdir.
ENFILE
Sistemdə açıq olan faylların ümumi sayına çatıldı.
Uyğun
SVr4, SVID, POSIX, X / OPEN, BSD 4.3 O_NOFOLLOW və O_DIRECTORY bayraqları Linux- spesifikdir . Onların təriflərini əldə etmək üçün _GNU_SOURCE makrosunu müəyyən etmək lazımdır.
Məhdudiyyətlər
NFS əsaslı protokolda bir çox infelicities var, digərləri ilə əlaqəli O_SYNC və O_NDELAY .
POSIX, O_SYNC , O_DSYNC və O_RSYNC bayraqlarına müvafiq olaraq sinxronlaşdırılmış I / O üç fərqli variant təmin edir. Hal-hazırda (2.1.130) bunlar Linux altında sinonimdir.