सारांश
#include << A HREF = "फाइल: /usr/include/sys/types.h"> sys / types.h> शामिल गर्नुहोस् << एक HREF = "फाइल: /usr/include/sys/stat.h"> sys / stat.h> # शामिल गर्नुहोस् << एक HREF = "फाइल: /usr/include/fcntl.h"> fcntl.h> int खुल्ला (const char * pathname , int flag ); int खुल्ला (const char * pathname , int झण्डा , मोड_टी मोड ); int creat (const char * pathname , mode_t mode );विवरण
खुला () प्रणाली कल लिनक्स कमांडले फाइल डिस्क्रिप्टरमा पथनामलाई कन्वर्ट गर्न प्रयोग गरिन्छ (पछि I / O मा प्रयोगको लागि एउटा सानो, गैर-नकारात्मक पूर्णांक पढ्न , लेख्ने आदि।)। जब कल सफल हुन्छ, फाइल वर्णनकर्ता विल फर्काइयो यो प्रक्रिया हालको लागि खुला छैन सबै भन्दा कम फाइल वर्णनकर्ता। यो कलले नयाँ खुल्ला फाइल सिर्जना गर्दछ, कुनै अन्य प्रक्रियासँग साझा गरिएको छैन। (तर खुला खुल्ला फाईलहरू फोर्क (2) प्रणाली कलबाट उत्पन्न हुन सक्छ।) नयाँ फाईल डिस्क्रिप्टकलाई कार्यान्वयनका लागि खुला कार्यमा खुला रहन सेट गरिएको छ ( fcntl (2) हेर्नुहोस्। फाईल अफसेट फाइलको सुरुवातमा सेट गरिएको छ।
प्यारामिटर झण्डा O_RONONLY , O_WRONLY वा O_RDWR को हो जुन जो पढ्ने-मात्र पढ्न वा मात्र पढ्न / लेख्ने, क्रमशः, bitwise- वा 'शून्य वा निम्नका साथ अधिक' फाइल खोल्न अनुरोध गर्दछ:
O_CREAT
यदि फाइल अवस्थित छैन यो सिर्जना गरिनेछ। फाइलको मालिक (प्रयोगकर्ता आईडी) प्रक्रियाको प्रभावकारी प्रयोगकर्ता आईडीमा सेट गरिएको छ। समूह स्वामित्व (समुह ID) लाई प्रक्रियाको प्रभावकारी समूह आइडी वा प्यारेन्ट डाइरेक्टरीको समूह आइडीमा सेट गरिएको छ (फाइल प्रणाली प्रकार र माउन्ट विकल्पहरूमा निर्भर गर्दछ, र अभिभावक डाइरेक्टरीको मोड हेर्नुहोस्, जस्तै, माउन्ट विकल्प bsdgroups र ext2 फाइल प्रणालीको sysvgroups , जस्तै माउन्ट (8) मा वर्णन गरिएको छ।
O_EXCL
O_CREAT सँग प्रयोग गर्दा, यदि फाइल पहिल्यै अवस्थित छ भने त्रुटि हो र खुला हुनेछ। यस सन्दर्भमा, एक प्रतीकात्मक लिङ्क अवस्थित छ, यसको बिन्दुमा यो कहाँ हुन्छ। O_EXCL NFS फाइल प्रणालीमा तोडिएको छ, जो प्रोग्रामहरू लक गर्ने कार्यहरूको लागि त्यसमा भरोसा राख्ने एक दौड अवस्था समावेश हुनेछ। लकफाइल प्रयोग गरेर परमाणु फाईल लक गर्ने कार्यको लागि समाधान एउटै एफएस (जस्तै, होस्टनाम र पिड समावेश गर्दछ) मा एक अद्वितीय फाइल सिर्जना गर्न, लिङ्कफाइलको लिङ्क बनाउन लिंक (2) प्रयोग गर्नुहोस् । यदि लिंक () 0 फर्काउँछ भने, लक सफल छ। अन्यथा, अनियमित फाइलमा stat (2) को प्रयोग गर्न को लागी यदि यसको लिङ्क गणना बढेको छ 2, यसको लागी लक लक सफल हुन्छ।
O_NOCTTY
यदि पथनाम नाम टर्मिनल यन्त्रलाई बुझाउँछ --- tty (4) --- हेर्नुहोस् यो प्रक्रियाको नियन्त्रण टर्मिनल भए तापनि प्रक्रियामा छैन भने।
O_TRUNC
यदि फाइल पहिल्यै अवस्थित छ र एक नियमित फाइल हो र खुला मोडलाई अनुमति दिन्छ (यानी, O_RDWR वा O_WRONLY) यो लम्बाई 0 मा रद्द गरिनेछ। यदि फाईफ FIFO वा टर्मिनल उपकरण फाइल हो, O_TRUNC झण्डा बेवास्ता गरिन्छ। अन्यथा, O_TRUNC को प्रभाव अज्ञात छ। (धेरै लिनक्स संस्करणहरूमा यो उपेक्षा गरिनेछ; अन्य संस्करणहरूमा, यसले एउटा त्रुटि फिर्ता गर्नेछ।)
O_APPEND
फाइल परिमार्जित मोडमा खोलिएको छ। प्रत्येक लेख गर्नु भन्दा पहिले, फाईल सूचक फाइलको अन्तमा पोष्ट गरिएको छ, जस्तै यदि लेसीसँग । O_APPEND ले NFS फाइल प्रणालीमा भ्रष्ट फाइलहरूको नेतृत्व गर्न सक्छ यदि एक भन्दा बढी प्रक्रियाले एकै पटक फाइलमा डाटा थप्छ। यो किनभने किनभने एनएफएसले फाइलको संलग्नतालाई समर्थन गर्दैन, त्यसैले क्लाइन्ट केर्नेलले यसलाई अनुकरण गरेको छ, जुन दौड अवस्था बिना काम गर्न सकिदैन।
O_NONBLOCK वा O_NDELAY
सम्भव हुँदा, फाइल गैर-अवरोध मोडमा खोलिएको छ। न खुला वा न कुनै पछिको अपरेसनले फाइल डिस्क्रिप्टकर्ता फर्काउँछ जुन कल प्रक्रिया प्रक्रिया पर्खनेछ। FIFOs (नामित पाइपहरू) लाई हैंडलिंगको लागि, पनि पियो (4) हेर्नुहोस्। यो मोडलाई FIFO भन्दा अन्य फाइलहरूमा कुनै असर पर्दैन।
O_SYNC
फाइल तुल्यकालित I / O का लागि खोलिएको छ। परिणामकारी फाइल वर्णनकर्तामा कुनैपनि लेख s ले कल प्रक्रियाको प्रक्रियालाई रोक्न जबसम्म डेटा शारीरिक रूपमा निर्वाहिक हार्डवेयरमा लेखिएको छ। तथापि उल्टो उल्लेखित हेर्नुहोस्।
O_NOFOLLOW
यदि पथनाम एउटा प्रतीकात्मक लिङ्क हो भने खुला छ असफल। यो FreeBSD एक्सटेन्सन हो, जुन लिनक्समा संस्करण 2.1.126 मा थपियो। पथनामको अघिल्लो अवयवहरूमा प्रतीकलिक लिङ्कहरू अझै पछ्याउनेछ। Glibc 2.0.100 बाट हेडरहरू र पछि यो झण्डाको परिभाषा समावेश गर्दछ; यदि प्रयोग भएमा 2.1.126 भन्दा पहिले यसलाई बेवास्ता गरिनेछ ।
O_DIRECTORY
यदि पथनाम नाम डाइरेक्टरी होइन भने, खोल्नको कारण खुला। यो झण्डा लिनक्स-विशिष्ट हो, र कर्नेल संस्करण 2.1.126 मा थपिएको थियो, यदि इन्कार गर्दा सेवा समस्याहरू रोक्न यदि ओपेन्डर (3) FIFO वा ट्याप यन्त्रमा भनिन्छ, तर opendir को कार्यान्वयनको बाहिर प्रयोग गर्नु हुँदैन। ।
O_DIRECT
यो फाइलबाट I / O को क्यास प्रभावहरू कम गर्न प्रयास गर्नुहोस्। सामान्यमा यसले प्रदर्शनलाई घटाउनेछ, तर विशेष परिस्थितिहरूमा यो उपयोगी छ, जस्तै जब अनुप्रयोगहरूले आफ्नै क्यासिंग गर्दछ। फाइल I / O लाई प्रयोगकर्ता स्पेस बफरबाट / बाट प्रत्यक्ष गरिन्छ। I / O तुल्यकालित हो, अर्थात्, पढ्ने (2) वा लेख (2) प्रणाली कल पूरा भएपछि, डाटा हस्तान्तरण गरिएको निश्चित छ। आकारान्तरण आकारहरू, र प्रयोगकर्ता बफरको संरेखण र फाईल अफसेट सबै फाइल फाइलको तार्किक ब्लक आकारको गुणहरू हुनुपर्छ।
यो झण्डा यूनिक्स जस्तै प्रणालीहरूमा समर्थित छ; समर्थन लिनक्स अन्तर्गत कर्नेल संस्करण 2.4.10 मा थपिएको थियो।
ब्लक यन्त्रहरूको लागि एक समान समान इन्टरफेसलाई कच्ची (8) मा वर्णन गरिएको छ।
O_ASYNC
सिग्नल उत्पन्न गर्नुहोस् (पूर्वनिर्धारित रूपमा SIGIO, तर यो fcntl (2) मार्फत परिवर्तन गर्न सकिन्छ जब यो फाइल वर्णनकर्तामा इनपुट वा उत्पादन सम्भव हुन्छ। यो सुविधा केवल टर्मिनलहरू, छद्म टर्मिनलहरू र स्याकेटहरूको लागि उपलब्ध छ। थप विवरणहरूको लागि fcntl (2) हेर्नुहोस्।
O_LARGEFILE
32-बिट प्रणालीहरूमा ठूला फाइल प्रणाली समर्थन गर्दछ, फाइलहरू जसको साइजहरू 31 बिटहरूमा खोल्नका लागी प्रतिनिधित्व गर्न सकिँदैन।
केहि मध्ये केहि वैकल्पिक झण्डा फाइल को खोलन पछि fcntl को उपयोग गरेर बदलन सकिन्छ।
तर्क मोडले नयाँ फाइल सिर्जना गरेको बेलामा अनुमतिहरू अनुमति निर्दिष्ट गर्दछ। यो सामान्य तरिकामा प्रक्रियाको इमस्कद्वारा परिमार्जित गरिएको छ: सिर्जना गरिएको फाइलको अनुमतिहरू (मोड र ~ इमस्क) छन् । ध्यान दिनुहोस् कि यो मोड केवल नयाँ सिर्जना फाइलको भविष्य पहुँचहरूमा लागू हुन्छ; खुला कल जसले पढ्ने-मात्र फाइल सिर्जना गर्दछ, राम्रोसँग पढ्न / लेख फाइल वर्णनकर्ता फर्काउन सक्छ।
निम्न प्रतीकात्मक बाधाहरू मोडका लागि प्रदान गरिएको छ:
S_IRWXU
00700 प्रयोगकर्ता (फाईल मालिक) ले पढ्ने, लेख्ने र अनुमति अनुमति दिनुभएको छ
S_IRUSR (S_IREAD)
00400 ले प्रयोगकर्तालाई पढ्ने अनुमति दिएको छ
S_IWUSR (S_Iराइट)
00200 प्रयोगकर्तासँग लेख्ने अनुमति छ
S_IXUSR (S_IEXEC)
00100 प्रयोगकर्ताले कार्यान्वयन अनुमति दिएको छ
S_IRWXG
00070 समूहले पढ्न, लेख्न र अनुमति अनुमति दिएको छ
S_IRGRP
00040 समूहले पढेको अनुमति पढेको छ
S_IWGRP
00020 समूहले लेख्ने अनुमति दिएको छ
S_IX जीआरपी
00010 समूहले अनुमति अनुमति दिएको छ
S_IRWXO
00007 अन्यसँग पढ्न, लेख्न र अनुमति अनुमति
S_IROTH
00004 अन्यसँग पढ्ने अनुमति छ
S_IWOTH
00002 अरूले अनुमति लेख्नु भएको छ
S_IXOTH
00001 अन्यसँग कार्यान्वयन अनुमति छ
मोड निर्दिष्ट हुनुपर्छ जब O_CREAT झण्डाहरूमा छ , र अन्यथा उपेक्षा गरिन्छ।
creat O_CREAT को बराबर झण्डाहरूसँग खोल्न बराबर छ | O_WRONLY | O_TRUNC ।
पुनः प्राप्ति VALUE
खोल्नुहोस् र सिर्जना गर्नुहोस् नयाँ फाईल वर्णनकर्ता, वा -1 यदि एउटा त्रुटी भयो (फर्कनुहोस्, अज्ञात उचित रूपमा सेट गरिएको छ भने)। ध्यान दिनुहोस् कि खुला उपकरण विशेष फाईलहरू खोल्न सक्दछ, तर सृष्टिले तिनीहरूलाई सिर्जना गर्न सक्दैन - यसको सट्टामा नेकोड (2) प्रयोग गर्नुहोस्।
UID म्यापिङ सक्षम भएको NFS फाइल प्रणालीहरूमा, खुला फाइल वर्णनकर्ता फर्काउन सक्छ तर उदाहरणका लागि पढ्न (2) अनुरोधहरू EACCES सँग अस्वीकार गरिएका छन्। यो कारणले गर्दा ग्राहकलाई अनुमतिहरू जाँच गरेर खुला प्रदर्शन गर्दछ, तर UID म्यापिङले पढेर र लेख्ने अनुरोधहरूमा सर्भरद्वारा प्रदर्शन गरेको छ।
यदि फाइल नयाँ सिर्जना गरिएको छ भने, यसको atime, ctime, म्याट फिल्डहरू वर्तमान समयमा सेट गरिएका छन्, र त्यसैले प्यारे डाइरेक्टरीको ctime र mtime फिल्डहरू छन्। अन्यथा, यदि OTRUNC फ्ल्यागको कारण फाइल परिमार्जित गरिन्छ, यसको ctime र म्याट फिल्ड हालको समय सेट गरिएको छ।
त्रुटिहरू
EEXIST
pathname पहिल्यै अवस्थित छ र O_CREAT र O_EXCL प्रयोग भएको थियो।
EISDIR
पथनामले डाइरेक्टरीलाई बुझाउँछ र अनुरोध गरिएको संलग्न लेख (जुन हो, O_WRONLY वा O_RDWR सेट गरिएको छ)।
EACCES
फाइलमा अनुरोध गरिएको पहुँचलाई अनुमति छैन, वा एक पथनाममा डाइरेक्टरीहरूको खोजी खोजी (निष्पादन) अनुमति अनुमति दिँदैन, वा फाइल अझै अवस्थित छैन र अभिभावक डाइरेक्टरीको पहुँच लेख्न अनुमति छैन।
ENAMETOOLONG
मार्गनाम धेरै लामो थियो।
ENOENT
O_CREAT सेट गरिएको छैन र नाम दिइएको फाइल अवस्थित छैन। वा, पथनाममा डाइरेक्टरी घटक अवस्थित छैन वा डंगलिंग प्रतीकात्मक लिङ्क हो।
ENOTDIR
पथनाममा डाइरेक्टरीको रूपमा प्रयोग गरिएको एक घटक होइन, वास्तवमा, एउटा डाइरेक्टरी, वा O_DIRECTORY निर्दिष्ट गरिएको थियो र पथनाम डाइरेक्टरी थिएन।
ENXIO
O_NONBLOCK | O_WRONLY सेट गरिएको छ, नाम दिइएको फाईल एक FIFO हो र पढ्नको लागी फाईल खोल्न कुनै प्रक्रिया छैन। वा, फाइल एक विशेष फाइल हो र कुनै सम्बन्धित उपकरण अवस्थित छैन।
ENODEV
पथनामले उपकरण विशेष फाइललाई बुझाउँछ र कुनै सम्बन्धित उपकरण अवस्थित छैन। (यो एक लिनक्स कर्नेल बग हो - यो अवस्थामा ENXIO फर्काउनु पर्छ।)
EROFS
पथनामनामले पढ्ने-मात्र फाइल प्रणालीमा फाईललाई बुझाउँछ र पहुँच लेखिएको अनुरोध गरिएको थियो।
ETXTBSY
पथनामनामले कार्यान्वयनयोग्य छविलाई बुझाउँछ जुन वर्तमानमा कार्यान्वयन गरिरहेको छ र पहुँच लेखिएको अनुरोध गरिएको थियो।
EFAULT
तपाईंको पहुँचयोग्य ठेगाना स्पेस बाहिरको मार्गनाम बिन्दुहरू।
ELOOP
पथनामनाम समाधान गर्दा धेरै प्रतीकात्मक लिंकहरू सामना भयो, वा O_NOFOLLOW निर्दिष्ट गरिएको थियो तर पथनाम नाम प्रतीक लिङ्क थियो।
ENOSPC
मार्गनाम सिर्जना गर्न थियो तर उपकरणमा पथनाममा नयाँ फाइलको लागि कुनै ठाउँ छैन।
ENOMEM
अपर्याप्त कर्नेल मेमोरी उपलब्ध थियो।
EMFILE
प्रक्रियासँग पहिले नै फाइलहरूको अधिकतम संख्या खोलिएको छ।
ENFILE
प्रणालीमा खुला फाइलहरूको कुल संख्यामा सीमा पुगेको छ।
अनुरूप
SVr4, SVID, POSIX, X / OPEN, BSD 4.3 O_NOFOLLOW र O_DIRECTORY झण्डा Linux -specific हुन्। उनीहरूको परिभाषा प्राप्त गर्न _GNU_SOURCE म्याक्रो परिभाषित हुन सक्छ।
प्रतिबन्धहरू
NFS अन्तर्गत प्रोटोकॉलमा धेरै अनौठो छन्, O_SYNC र O_NDELAY को बीचमा असर पर्दछ ।
POSIX ले सिंक्रोनाइज गरिएको आई / ओ को तीन भिन्न विरूद्धहरूको लागि प्रदान गर्दछ, झण्डा O_SYNC , O_DSYNC र O_RSYNC सँग सम्बन्धित । हाल (2.1.130) यी सबै लिनक्स अन्तर्गत सममोजिम छन्।