सार
#शामिल
विवरण
खुला() सिस्टम कॉल लिनक्स कमांड का उपयोग पथनाम को फ़ाइल डिस्क्रिप्टर में बदलने के लिए किया जाता है (बाद में I / O में उपयोग के लिए एक छोटा, गैर-ऋणात्मक पूर्णांक पढ़ना, लिखो, आदि।)। जब कॉल सफल होता है, तो फाइल डिस्क्रिप्टर वापस सबसे कम फ़ाइल डिस्क्रिप्टर होता है जो वर्तमान में प्रक्रिया के लिए खुला नहीं होता है। यह कॉल एक नई खुली फ़ाइल बनाता है, किसी अन्य प्रक्रिया के साथ साझा नहीं किया जाता है। (लेकिन साझा खुली फाइलें उत्पन्न हो सकती हैंकांटा(2) सिस्टम कॉल।) नई फ़ाइल डिस्क्रिप्टर निष्पादित कार्यों में खुले रहने के लिए सेट है (देखेंfcntl(2))। फ़ाइल ऑफसेट फ़ाइल की शुरुआत में सेट है।
पैरामीटर झंडे में से एक हैO_RDONLY, O_WRONLY याO_RDWR जो फ़ाइल को केवल पढ़ने के लिए अनुरोध करने का अनुरोध करता है, क्रमशः केवल लिखना या पढ़ना / लिखना, बिटवाई- या निम्नलिखित में से शून्य या अधिक के साथ:
O_CREAT
अगर फ़ाइल मौजूद नहीं है तो यह बनाया जाएगा। फ़ाइल का मालिक (उपयोगकर्ता आईडी) प्रक्रिया की प्रभावी उपयोगकर्ता आईडी पर सेट है। समूह स्वामित्व (समूह आईडी) या तो प्रक्रिया की प्रभावी समूह आईडी या मूल निर्देशिका की समूह आईडी (फाइल सिस्टम प्रकार और माउंट विकल्प के आधार पर, और मूल निर्देशिका के मोड के आधार पर सेट किया गया है, देखें, उदाहरण के लिए, माउंट विकल्प bsdgroups तथा sysvgroups जैसा कि वर्णन किया गया है ext2 फाइल सिस्टम कापर्वत(8)).
O_EXCL
जब प्रयोग किया जाता हैO_CREAT, अगर फ़ाइल पहले से मौजूद है तो यह एक त्रुटि है औरखुला असफल हो जायेगी। इस संदर्भ में, इसके प्रतीकों के बावजूद, एक प्रतीकात्मक लिंक मौजूद है।O_EXCL एनएफएस फाइल सिस्टम पर टूटा हुआ है, प्रोग्राम जो लॉकिंग कार्यों को करने के लिए इस पर भरोसा करते हैं, उनमें दौड़ की स्थिति होगी। लॉकफ़ाइल का उपयोग करके परमाणु फ़ाइल लॉकिंग करने का समाधान एक ही fs (उदा।, होस्टनाम और पिड को शामिल करना) पर एक अनन्य फ़ाइल बनाना है, लॉकफ़ाइल के लिए लिंक बनाने के लिए लिंक (2) का उपयोग करें। अगरसंपर्क() 0 देता है, ताला सफल है। अन्यथा, उपयोग करें स्टेट(2) अनन्य फ़ाइल पर यह जांचने के लिए कि क्या इसकी लिंक गिनती 2 हो गई है, इस स्थिति में लॉक भी सफल है।
O_NOCTTY
अगर पथ नाम टर्मिनल डिवाइस को संदर्भित करता है --- देखेंtty(4) --- यह प्रक्रिया प्रक्रिया के नियंत्रण टर्मिनल नहीं बन जाएगी भले ही प्रक्रिया में कोई नहीं है।
O_TRUNC
अगर फ़ाइल पहले से मौजूद है और एक नियमित फाइल है और ओपन मोड लेखन की अनुमति देता है (यानी, ओ_आरडीडब्ल्यूआर या ओ_WRONLY) इसे लंबाई 0 तक छोटा कर दिया जाएगा। यदि फ़ाइल एक फीफो या टर्मिनल डिवाइस फ़ाइल है, तो O_TRUNC ध्वज को अनदेखा कर दिया जाता है। अन्यथा, O_TRUNC का प्रभाव अनिर्दिष्ट है। (कई लिनक्स संस्करणों पर इसे अनदेखा कर दिया जाएगा; अन्य संस्करणों पर, यह एक त्रुटि लौटाएगा।)
O_APPEND
फ़ाइल संलग्न मोड में खोला गया है। प्रत्येक से पहलेलिखो, फाइल पॉइंटर फ़ाइल के अंत में स्थित है, जैसा कि साथ हैlseek. O_APPEND यदि एक से अधिक प्रक्रिया डेटा को एक बार में फ़ाइल में जोड़ती है तो एनएफएस फाइल सिस्टम पर दूषित फ़ाइलों का कारण बन सकता है। ऐसा इसलिए है क्योंकि एनएफएस किसी फ़ाइल में संलग्न करने का समर्थन नहीं करता है, इसलिए क्लाइंट कर्नेल को इसे अनुकरण करना होता है, जिसे दौड़ की स्थिति के बिना नहीं किया जा सकता है।
O_NONBLOCK यादेरी पर
जब संभव हो, फ़ाइल गैर-अवरुद्ध मोड में खोली जाती है। न तोखुला न ही फ़ाइल डिस्क्रिप्टर पर आने वाले किसी भी ऑपरेशन को कॉलिंग प्रक्रिया का इंतजार करना होगा। एफआईएफओ (नामित पाइप) के संचालन के लिए, यह भी देखेंफीफो(4)। इस मोड को फीफो के अलावा अन्य फ़ाइलों पर कोई प्रभाव नहीं पड़ता है।
O_SYNC
फाइल सिंक्रोनस I / O के लिए खोला गया है। कोई भीलिखोपरिणामी फ़ाइल डिस्क्रिप्टर पर कॉलिंग प्रक्रिया को अवरुद्ध कर देगा जब तक कि डेटा अंतर्निहित हार्डवेयर को भौतिक रूप से लिखा नहीं जाता है। हालांकि, नीचे प्रतिबंध देखें।
O_NOFOLLOW
अगर पथ नाम एक प्रतीकात्मक लिंक है, तो खुला विफल रहता है। यह एक फ्रीबीएसडी एक्सटेंशन है, जिसे संस्करण 2.1.126 में लिनक्स में जोड़ा गया था। पथनाम के पुराने घटकों में प्रतीकात्मक लिंक अभी भी पालन किए जाएंगे। Glibc 2.0.100 से हेडर और बाद में इस ध्वज की परिभाषा शामिल है; यदि 2.1.126 से पहले कर्नेल इसे इस्तेमाल करते हैं तो इसे अनदेखा कर देगा .
O_DIRECTORY
अगर पथ नाम निर्देशिका नहीं है, विफल होने के लिए खुला है। यह ध्वज लिनक्स-विशिष्ट है, और यदि सेवा अस्वीकार करने से बचने के लिए कर्नेल संस्करण 2.1.126 में जोड़ा गया थाopendir(3) को फीफो या टेप डिवाइस पर बुलाया जाता है, लेकिन इसे कार्यान्वित करने के बाहर इस्तेमाल नहीं किया जाना चाहिएopendir.
O_DIRECT
इस फ़ाइल से I / O के कैश प्रभाव को कम करने का प्रयास करें। आम तौर पर यह प्रदर्शन को कम कर देगा, लेकिन यह विशेष परिस्थितियों में उपयोगी है, जैसे कि जब अनुप्रयोग अपनी कैशिंग करते हैं। फ़ाइल I / O उपयोगकर्ता स्पेस बफर से सीधे / से किया जाता है। I / O तुल्यकालिक है, यानी, पूरा होने पर पढ़ना(2) यालिखो(2) सिस्टम कॉल, डेटा स्थानांतरित करने की गारंटी है। स्थानांतरण आकार, और उपयोगकर्ता बफर और फ़ाइल ऑफ़सेट के संरेखण फ़ाइल सिस्टम के तार्किक ब्लॉक आकार के गुणक होना चाहिए।यह ध्वज कई यूनिक्स जैसी प्रणालियों पर समर्थित है; कर्नेल संस्करण 2.4.10 में लिनक्स के तहत समर्थन जोड़ा गया था।ब्लॉक उपकरणों के लिए एक अर्थात् समान इंटरफ़ेस में वर्णित हैकच्चा(8). O_ASYNC एक सिग्नल उत्पन्न करें (डिफ़ॉल्ट रूप से सिगियो, लेकिन इसे बदला जा सकता हैfcntl(2)) जब इस फ़ाइल डिस्क्रिप्टर पर इनपुट या आउटपुट संभव हो जाता है। यह सुविधा केवल टर्मिनलों, छद्म टर्मिनलों और सॉकेट के लिए उपलब्ध है। देखfcntl(2) अधिक जानकारी के लिए। O_LARGEFILE बड़ी फाइल सिस्टम का समर्थन करने वाले 32-बिट सिस्टम पर, उन फ़ाइलों को अनुमति दें जिनके आकार 31 बिट्स में खोले जाने के लिए प्रदर्शित नहीं किए जा सकते हैं। इनमें से कुछ वैकल्पिक झंडे का उपयोग करके बदला जा सकता हैfcntl फ़ाइल खोले जाने के बाद। बहस मोड एक नई फ़ाइल बनाई गई है, तो उपयोग करने के लिए अनुमतियों को निर्दिष्ट करता है। यह प्रक्रिया द्वारा संशोधित हैumask सामान्य तरीके से: बनाई गई फ़ाइल की अनुमतियां हैं(मोड और ~ उमास्क)। ध्यान दें कि यह मोड केवल नव निर्मित फ़ाइल के भविष्य के उपयोग पर लागू होता है;खुलाकॉल जो केवल पढ़ने-योग्य फ़ाइल बनाता है, एक अच्छी तरह से पढ़ / लिखने वाली फ़ाइल डिस्क्रिप्टर लौटा सकता है। निम्नलिखित प्रतीकात्मक स्थिरांक प्रदान किए जाते हैं मोड : S_IRWXU 00700 उपयोगकर्ता (फ़ाइल स्वामी) ने अनुमति को पढ़, लिख और निष्पादित किया है S_IRUSR (S_IREAD) 00400 उपयोगकर्ता को पढ़ने की अनुमति है S_IWUSR (S_IWRITE) 00200 उपयोगकर्ता के पास लिखने की अनुमति है S_IXUSR (S_IEXEC) 00100 उपयोगकर्ता को निष्पादन अनुमति है S_IRWXG 00070 समूह ने अनुमति को पढ़, लिख और निष्पादित किया है S_IRGRP 00040 समूह में पढ़ने की अनुमति है S_IWGRP 00020 समूह में लेखन की अनुमति है S_IXGRP 00010 समूह निष्पादन अनुमति है S_IRWXO 00007 अन्य ने अनुमति को पढ़, लिखना और निष्पादित किया है S_IROTH 00004 दूसरों को पढ़ने की अनुमति है S_IWOTH 00002 दूसरों के पास लिखने की अनुमति है S_IXOTH 00001 अन्य लोगों को निष्पादन की अनुमति है मोड जब निर्दिष्ट किया जाना चाहिएO_CREAT में हे झंडे , और अन्यथा अनदेखा किया जाता है। मूल्य बना के बराबर हैखुला साथ में झंडे के बराबरO_CREAT | O_WRONLY | O_TRUNC. प्रतिलाभ की मात्रा खुला तथामूल्य बना नई फ़ाइल डिस्क्रिप्टर को वापस करें, या -1 यदि कोई त्रुटि हुई (जिस स्थिति में, errno उचित रूप से सेट है)। ध्यान दें किखुला डिवाइस विशेष फाइलें खोल सकते हैं, लेकिनमूल्य बना उन्हें नहीं बना सकते - उपयोग करेंmknod(2) इसके बजाए। यूआईडी मैपिंग सक्षम के साथ एनएफएस फाइल सिस्टम पर,खुला एक फाइल डिस्क्रिप्टर वापस कर सकते हैं लेकिन उदा। पढ़ना(2) अनुरोधों से इनकार किया जाता हैEACCES। ऐसा इसलिए है क्योंकि ग्राहक प्रदर्शन करता हैखुला अनुमतियों की जांच करके, लेकिन यूआईडी मानचित्रण सर्वर द्वारा पढ़ने और लिखने के अनुरोधों पर किया जाता है। अगर फ़ाइल को नया बनाया गया है, तो इसके एटीम, सीटाइम, एमटाइम फ़ील्ड्स वर्तमान समय पर सेट हैं, और इसलिए मूल निर्देशिका के सीटा और माइट फ़ील्ड भी हैं। अन्यथा, यदि O_TRUNC ध्वज के कारण फ़ाइल संशोधित की गई है, तो इसके सीटा और माटा फ़ील्ड वर्तमान समय पर सेट हैं। EEXIST पथ नाम पहले से मौजूद है औरO_CREAT तथाO_EXCL इस्तेमाल किया गया। EISDIR पथ नाम एक निर्देशिका को संदर्भित करता है और अनुरोधित अनुरोध का अनुरोध किया जाता है (यानी,O_WRONLY याO_RDWR सेट है)। EACCES फ़ाइल में अनुरोधित पहुंच की अनुमति नहीं है, या निर्देशिका में से एक है पथ नाम खोज (निष्पादन) अनुमति की अनुमति नहीं दी है, या फ़ाइल अभी तक मौजूद नहीं है और मूल निर्देशिका तक पहुंच लिखने की अनुमति नहीं है। ENAMETOOLONG पथ नाम बहुत लंबा था। ENOENT O_CREAT सेट नहीं है और नामित फ़ाइल मौजूद नहीं है। या, एक निर्देशिका घटक में पथ नाम मौजूद नहीं है या एक लटकन प्रतीकात्मक लिंक है। ENOTDIR निर्देशिका में एक घटक के रूप में प्रयोग किया जाता है पथ नाम वास्तव में, एक निर्देशिका, या नहीं हैO_DIRECTORYनिर्दिष्ट किया गया था और पथ नाम निर्देशिका नहीं थी ENXIO O_NONBLOCK | O_WRONLY सेट है, नामित फ़ाइल एक फीफो है और पढ़ने के लिए फ़ाइल को खोलने के लिए कोई प्रक्रिया नहीं है। या, फ़ाइल एक डिवाइस विशेष फ़ाइल है और कोई संबंधित डिवाइस मौजूद नहीं है। ENODEV पथ नाम एक डिवाइस विशेष फ़ाइल को संदर्भित करता है और कोई संबंधित डिवाइस मौजूद नहीं है। (यह एक लिनक्स कर्नेल बग है - इस स्थिति में ENXIO वापस किया जाना चाहिए।) EROFS पथ नाम केवल पढ़ने-योग्य फाइल सिस्टम पर एक फ़ाइल को संदर्भित करता है और लेखन पहुंच का अनुरोध किया गया था। ETXTBSY पथ नाम एक निष्पादन योग्य छवि को संदर्भित करता है जिसे वर्तमान में निष्पादित किया जा रहा है और लेखन लेखन का अनुरोध किया गया था। EFAULT पथ नाम आपके सुलभ पता स्थान के बाहर अंक। ELOOP हल करने में बहुत सारे प्रतीकात्मक लिंक सामने आए थे पथ नाम , याO_NOFOLLOW निर्दिष्ट किया गया था लेकिन पथ नाम एक प्रतीकात्मक लिंक था। ENOSPC पथ नाम बनाया गया था लेकिन डिवाइस युक्त था पथ नाम नई फाइल के लिए कोई जगह नहीं है। ENOMEM अपर्याप्त कर्नेल मेमोरी उपलब्ध थी। EMFILE प्रक्रिया में पहले से ही फाइलों की अधिकतम संख्या खुली है। ENFILE सिस्टम पर खुली फाइलों की कुल संख्या पर सीमा तक पहुंच गई है। एसवीआर 4, एसवीआईडी, पॉज़िक्स, एक्स / ओपन, बीएसडी 4.3 दO_NOFOLLOW तथाO_DIRECTORY झंडे लिनक्स-विशिष्ट हैं। एक को परिभाषित करना पड़ सकता है_GNU_SOURCE मैक्रो अपनी परिभाषाएं प्राप्त करने के लिए। एनएफएस अंतर्निहित प्रोटोकॉल में कई infelicities हैं, दूसरों के बीच प्रभावितO_SYNC तथादेरी पर. POSIX झंडे के अनुरूप, सिंक्रनाइज़ I / O के तीन अलग-अलग प्रकार प्रदान करता हैO_SYNC , O_DSYNC तथा O_RSYNC। वर्तमान में (2.1.130) ये सब लिनक्स के समानार्थी हैं। त्रुटियाँ
के अनुरूप करना
प्रतिबंध




