सारांश
# अंतर्भूत << एक HREF = "file: /usr/include/sys/types.h"> sys / types.h> # अंतर्भूत << एक HREF = "file: /usr/include/sys/stat.h"> sys / stat.h> # अंतर्भूत << एक HREF = "file: /usr/include/fcntl.h"> fcntl.h> पूर्ण उघडा (const char * pathname , int flags ); इंट ओपन (कॉन्स्ट चार * पाथनाव , इंट फ्लॅग , मोड_टी मोड ); int creat (const char * pathname, mode_t मोड );वर्णन
ओपन () सिस्टम कॉल linux कमांडचा वापर पाथनामला फाइल डिस्क्रिप्टरमध्ये रुपांतरित करण्यासाठी केला जातो (त्यानंतरच्या I / O मध्ये वाचन , लेखन , इत्यादीसाठी वापरण्यासाठी एक लहान, अ-नकारात्मक पूर्णांक). जेव्हा कॉल यशस्वी झाला, तेव्हा फाइल डिस्क्रिप्टर परत प्रक्रियेसाठी खुले सर्वात कमी फाइल डिस्क्रिप्टर नसावे. हा कॉल एक नवीन उघडलेली फाइल तयार करतो, कोणत्याही अन्य प्रक्रियेसह सामायिक नाही. (परंतु सामायिक फाइल्स फोर्क (2) प्रणाली कॉलद्वारे निर्माण होऊ शकतात.) नवीन फाइल डिस्क्रिप्टर एडीएल फंक्शन्समध्ये खुले राहण्यासाठी सेट आहे ( fcntl (2) पहा). फाइल ऑफसेट फाइलच्या सुरवातीस सेट आहे.
पॅरामीटरचे ध्वज हे O_RDONLY , O_WRONLY किंवा O_RDWR पैकी एक आहे ज्यात फाइल केवळ-वाचनीय उघडत आहे, फक्त-लिहिण्यासाठी किंवा वाचन / अनुक्रमित, अनुक्रमे बिटवर्ड- किंवा 'ड चे शून्य किंवा त्याहून अधिक:
O_CREAT
फाईल अस्तित्वात नसल्यास ती तयार केली जाईल. फाइलचा मालक (वापरकर्ता आयडी) प्रक्रियेच्या प्रभावी वापरकर्ता ID वर सेट आहे. समूह मालकी (गट आयडी) एकतर प्रक्रियेच्या प्रभावी गट आयडी किंवा मूळ निर्देशिकेचा ग्रुप आयडी (फाईल सिस्टीम प्रकार आणि माउंट ऑप्शन्स आणि मूळ डायरेक्टरीच्या मोडवर आधारित) वर सेट आहे, उदाहरणार्थ, माउंट mount (8) मधील वर्णनप्रमाणे ext2 फाइलसिस्टमच्या bsdgroups व sysvgroups पर्याय.
O_EXCL
O_CREAT सह वापरल्यास, जर फाइल आधीच अस्तित्वात असेल तर ती एक त्रुटी आहे आणि ओपन अपयशी ठरेल. या संदर्भात, एक प्रतिकात्मक दुवा अस्तित्वात आहे, मग त्याचे मुद्दे कुठे आहेत O_EXCL हे NFS फाइल प्रणालीवर खंडित झाले आहे, लॉकिंग कार्यांकरिता प्रोग्रामवर अवलंबून असणाऱ्या प्रोग्राममध्ये रेस कंडीशन असेल. लॉकफाइलचा वापर करुन अणू फाइल कुलूपबंद करण्यासाठीचे उपाय म्हणजे समान fs (उदा. होस्टनाव आणि पीआयडी समाविष्ट करणे) वरील एक अद्वितीय फाइल तयार करणे, लॉकफाइलशी दुवा साधण्यासाठी दुवा वापरा (2) जर लिंक ( 0 ) परत येईल, तर लॉक यशस्वी होईल. नाहीतर, स्टॅक्ट (2) अनन्य फाइलवर याचा वापर करा जेणेकरून त्याची लिंक संख्या 2 झाली आहे का ते तपासा, ज्या बाबतीत लॉकही यशस्वी आहे
O_NOCTTY
जर पथनाव टर्मिनल यंत्रास संदर्भित असेल- तर tty पहा (4) --- ही प्रक्रियेची नियंत्रण टर्मिनलही होणार नाही जरी प्रक्रियामध्ये एक नसेल
O_TRUNC
फाइल आधीच अस्तित्वात असल्यास आणि एक नियमित फाइल असेल आणि ओपन मोड लिखित करण्यास परवानगी देते (उदा. O_RDWR किंवा O_WRONLY) ती थोडक्यात कमी केली जाईल. जर फाइल एक फिफा किंवा टर्मिनल डिव्हाइस फाइल असेल तर O_TRUNC ध्वज दुर्लक्षित केले जाईल. अन्यथा, O_TRUNC चे परिणाम निर्दिष्ट न केलेले आहेत. (अनेक Linux आवृत्त्यांवर ते दुर्लक्ष केले जाईल; इतर आवृत्तींवर, ते एक त्रुटी देईल.)
O_APPEND
फाईल एन्ड मोडमध्ये उघडली आहे. प्रत्येक लिहिण्यापूर्वी , फाइल पॉईंटर फाइलच्या शेवटी स्थित असते, जसे की lseek सह. O_APPEND NFS फाइल सिस्टीमवर दूषित फाइल्सला कारणीभूत होऊ शकतो जर एकापेक्षा अधिक प्रक्रिया एका फाइलमध्ये एकाच वेळी डेटा जोडते. याचे कारण असे की NFS फाइलमध्ये जोडणे समर्थित करत नाही, जेणेकरून क्लाएंट कर्नेल त्यास अनुकरण करणे आवश्यक आहे, जे रेस कंडीशनशिवाय केले जाऊ शकत नाही.
O_NONBLOCK किंवा O_NDELAY
जेव्हा शक्य असेल तेव्हा फाईल ना-अवरोधित मोडमध्ये उघडली जाते. फाईल डिस्क्रिप्टरवर परत किंवा कोणतेही त्यानंतरचे ऑपरेशन परत केले जात नाही कारण कॉलिंग प्रक्रिया थांबावे. फिफॉ च्या हाताळणीसाठी (नामित पाईप्स), फिफा (4) पहा. FIFO व्यतिरिक्त इतर फाइल्सवर या मोडवर कोणतेही परिणाम असणे आवश्यक नाही.
O_SYNC
फाइल सिंक्रोन्स I / O साठी उघडली जाते परिणामी फाइल डिस्क्रिप्टरवर कोणताही लेखन एसबीआय लाइफच्या डेटाबेअरवर डेटा पाठविला जाईल जोपर्यंत डेटा हार्डवेअरमध्ये शारीरिकरित्या लिहिला जात नाही तोवर ब्लॉक करेल. खाली मर्यादा पहा, तरी.
O_NOFOLLOW
पाथनाव एक प्रतिकात्मक दुवा असल्यास, नंतर ओपन अयशस्वी. हे फ्री बीएसडी एक्सटेंशन आहे, जे आवृत्ती 2.1.126 मध्ये लिनक्समध्ये जोडले आहे. पथनाव च्या पूर्वीच्या घटकांमध्ये सिंबोलिक दुवे अद्याप अनुसरण केले जातील. Glibc 2.0.100 चे शीर्षलेख आणि नंतर या ध्वजाची व्याख्या समाविष्ट करते; वापरल्यास 2.1.126 पूर्वी कर्नल दुर्लक्ष करतात .
O_DIRECTORY
पथनाव जर डिरेक्टरी नसेल तर उघडण्यास अपयशी ठरेल. हा ध्वज लिनक्स-विशिष्ट आहे, आणि कर्नल आवृत्ती 2.1.126 मध्ये जोडला गेला आहे, जर अपारदर्शक (3) फाईफो किंवा टेप साधनावर कॉल केला असेल तर अपरिहार्यतेच्या अंमलबजावणीच्या बाहेर वापरता येणार नाही. .
O_DIRECT
I / O चे कॅशे प्रभाव कमी करण्यासाठी आणि या फाइलपासून प्रयत्न करा. सर्वसाधारणपणे कामगिरी कमी होईल, परंतु विशेष परिस्थितीत उपयुक्त आहे, जसे की अनुप्रयोग जेव्हा स्वत: च्या कॅशिंग करतात. फाईल I / O हे यूजर स्पेशल बफरवरून / थेट केले जाते. I / O सिंक्रोनास म्हणजे म्हणजेच वाचन (2) किंवा लिहा (2) सिस्टम कॉल पूर्ण झाल्यानंतर, डेटा स्थानांतरित करण्यात येण्याची खात्री असते. आकार बदलवा, आणि वापरकर्ता बफरची संरेखन आणि फाईल ऑफसेट फाइल सिस्टमच्या लॉजिकल ब्लॉक आकारातील एकाधिक असणे आवश्यक आहे.
हे ध्वज अनेक युनिक्स सारख्या प्रणालीवर समर्थित आहे; समर्थन कर्नल आवृत्ती 2.4.10 मधील Linux अंतर्गत समाविष्ट केले गेले.
ब्लॉक साधनांकरिता शब्दार्थानुसार समान इंटरफेस कच्चे (8) मध्ये वर्णन केले आहे.
O_ASYNC
एक सिग्नल व्युत्पन्न करा (SIGIO डिफॉल्ट द्वारे, परंतु हे fcntl (2) द्वारे बदलले जाऊ शकते) जेव्हा या फाईल डिस्क्रीप्टरवर इनपुट किंवा आउटपुट शक्य होते. हे वैशिष्ट्य केवळ टर्मिनल, स्यूडो-टर्मिनल आणि सॉकेटसाठी उपलब्ध आहे अधिक माहितीसाठी fcntl (2) पहा.
O_LARGEFILE
32-बिट प्रणालींवर जे लार्ज फाइल सिस्टीमला साहाय्य करतात, अशा फायलींना परवानगी द्या ज्याचे आकार उघडण्यासाठी 31 बिट्स मध्ये दर्शविले जाऊ शकत नाही.
फाईल उघडल्या गेल्यानंतर यापैकी काही वैकल्पिक ध्वजांकने fcntl वापरून बदलल्या जाऊ शकतात.
आर्ग्यूमेंट मोड नवीन फाइल बनविल्यास वापरण्याकरिता परवानगी दर्शवतो. हे प्रक्रियेच्या उमस्क्र द्वारा नेहमीच्या पद्धतीने सुधारित केले आहे: तयार केलेल्या फाइलची परवानगी (मोड & ~ मास्क) आहे . लक्षात ठेवा ही मोड केवळ नव्याने तयार केलेल्या फाईलच्या भविष्यातील प्रवेशांवर लागू होते; खुले कॉल जे केवळ-वाचनीय फाइल बनविते तसेच वाचन / लेखन फाइल वर्णनकर्ता परत करेल.
खालील सांकेतिक स्थिरांक मोडसाठी प्रदान केले आहेत:
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 ध्वजांमधील आहे आणि अन्यथा दुर्लक्ष केले जाते
creat हे ओबामा O_CREAT | O_WRONLY | O_TRUNC च्या बरोबरीने उघडण्यासाठी समान आहे.
परत VALUE
नवीन फाइल डिस्क्रिप्टर उघडा किंवा तयार करा, किंवा -1 जर एखाद्या त्रुटीमुळे आली (ज्या बाबतीत, चूक योग्यप्रकारे सेट केली असेल तर) लक्षात ठेवा ओपन खुल्या विशेष फाइल्स उघडू शकते, परंतु creat त्यांना तयार करू शकत नाही - त्याऐवजी mknod (2) वापरा.
UID मॅपिंग सक्षम केलेल्या NFS फाइल सिस्टीमवर, ओपन फाइल डिस्क्रिप्टर परत करेल परंतु उदा. EACCES सह (2) विनंती नाकारल्या जातील . याचे कारण असे की क्लाएंट परवानग्या तपासून उघडल्या जातात, परंतु यूडी मॅपिंग विनंती वाचताना आणि लिहिण्यावरुन सर्व्हरद्वारे केली जाते.
जर फाइल नव्याने निर्माण झाली असेल, तर त्याचे atime, ctime, mtime क्षेत्र सध्याच्या वेळेस सेट केले जाईल, आणि म्हणून मूळ निर्देशिकेतील ctyme आणि mtime क्षेत्र देखील आहेत. अन्यथा, जर फाइल O_TRUNC ध्वजमुळे सुधारित झाली असेल, तर त्याचा ctime आणि mtime क्षेत्र सध्याच्या वेळेस सेट आहे
त्रुटी
EEXIST
पथनाव आधीपासूनच विद्यमान आहे आणि O_CREAT आणि O_EXCL वापरले होते
EISDIR
पाथनाव म्हणजे निर्देशिकेस आणि त्यात समाविष्ट प्रवेशास (म्हणजेच, ओ-वॉरोनि किंवा ओ_आरडीडब्ल्यूआर सेट आहे).
EACCES
फाइलकरिता विनंतीची परवानगी नाही, किंवा पथनामधील निर्देशिकांपैकी एकाने शोध (एक्झेटेड) परवानगीची परवानगी दिली नाही, किंवा फाइल अद्याप अस्तित्वात नाही आणि पॅरेंट डायरेक्टरीमध्ये प्रवेश लिहिण्याची परवानगी नाही.
ENAMETOOLONG
पथनाव खूप मोठे आहे
ENOENT
O_CREAT सेट केलेले नाही आणि नामित फाइल अस्तित्त्वात नाही. किंवा, पाथनेममधील निर्देशिका घटका अस्तित्वात नाही किंवा ती धोकादायक प्रतिकात्मक दुवा आहे.
ENOTDIR
पथनावमध्ये निर्देशिका म्हणून वापरले जाणारे घटक खरेतर, निर्देशिका नाही, किंवा O_DIRECTORY निर्दिष्ट केले गेले आहे आणि पथनाव निर्देशिका नाही
ENEXIO
O_NONBLOCK | O_WRONLY सेट आहे, नामांकीत फाइल एक FIFO आहे आणि कोणतीही प्रक्रिया वाचण्यासाठी फाइल उघडलेली नाही. किंवा, फाईल एक डिव्हाइस विशेष फाइल आहे आणि संबंधित डिव्हाइस अस्तित्वात नाही.
ENODEV
पथनाव डिव्हाइस विशेष फाईल संदर्भित करते आणि कोणतेही संबंधित डिव्हाइस अस्तित्वात नाही. (हे एक Linux कर्नल बग आहे - या परिस्थितीत ENEXIO परत करणे आवश्यक आहे.)
ईआरओएफएस
पथनाव म्हणजे केवळ-वाचनीय फाइलसिस्टमवर फाइलला संदर्भ देते आणि लेखन प्रवेशाची विनंती केली गेली.
ETXTBSY
पथनाव एक एक्झिक्युटेबल इमेज संदर्भात आहे जो सध्या कार्यान्वित होत आहे आणि प्रवेशाची विनंती करण्यात आली आहे.
EFAULT
पथनाव आपल्या प्रवेशजोगी पत्ता स्थानाच्या बाहेर.
ELOOP
पाथ नेमचे निराकरण करण्यासाठी बरेच प्रतीकात्मक दुवे आढळतात, किंवा O_NOFOLLOW निर्दिष्ट केले होते परंतु पथनाव एक सिम्बॉलिक दुवा होते
ENOSPC
पथनाव तयार केले गेले होते परंतु त्यास असलेल्या पथनामध्ये नवीन फाइलसाठी जागा नाही.
ENOMEM
अपुरे कर्नल मेमरी उपलब्ध होते.
EMFILE
प्रक्रियेस आधीपासून कमाल फायलींची संख्या उघडली आहे.
ENFILE
प्रणालीवर उघडलेल्या एकूण फाइल्सची मर्यादा गाठली आहे.
सह अनुकूल
SVr4, SVID, POSIX, X / OPEN, BSD 4.3 O_NOFOLLOW आणि O_DIRECTORY ध्वज हा लिनक्स- विशिष्ट आहे. त्यांच्या परिभाषा मिळविण्यासाठी एखाद्यास _GNU_SOURCE मॅक्रो परिभाषित करावे लागेल.
निर्बंध
NFS अंतर्गत असलेल्या प्रोटोकॉलमध्ये अनेक अनपेक्षित गोष्टी आहेत , ज्यामध्ये ओएससीएनएन आणि ओ_एनडीएअर या इतर गोष्टींचा समावेश होतो .
POSIX सिंक्रोनाइझ्ड I / O च्या तीन भिन्न प्रकारांना पुरवतो, जे O_SYNC , O_DSYNC आणि O_RSYNC ध्वजांकनाशी संबंधित आहेत. सध्या (2.1.130) हे सर्व लिनक्स अंतर्गत समानार्थी आहेत.