ማጠቃለያ
#include "A HREF =" file: /usr/include/sys/types.h "> sys / types.h> #include" A HREF = "file: /usr/include/sys/stat.h"> sys / stat.h> #include "A HREF =" file: /usr/include/fcntl.h "> fcntl.h> int open (const char * pathname , int flags ); int open (const char * pathname , int flags , mode_t ሁነታ ); int creat (ደንብ char * pathname , mode_t ሁነታ );መግለጫ
ክፍት () የስርዓት ጥሪ ሎይስ ትዕዛዝ የአንድ ስሪት ስምን ወደ የፋይል ገላጭ ( በንባብ , በጽሑፍ , ወዘተ ላይ ጥቅም ላይ መዋልን በተመለከተ አነስተኛ, ጎጂ-ኢንቲጀር) ለመቀየር ጥቅም ላይ ይውላል. ጥሪው ስኬታማ ሲሆን የፋይል ገላጭው ተመልሶ ለሂደቱ ያልተከፈተ በጣም አነስተኛ የፋይል ገላጭ ነው. ይህ ጥሪ አዲስ ክፍት ፋይል ይፈጥርና ከማንኛውም ሌላ ሂደት ጋር አይጋራም. (ነገር ግን የተጋራ ፋይል በፎቶ (2) የስልክ ጥሪ በኩል ሊነሳ ይችላል.) አዲሱ የፋይል ገላጭ በሂደቶች ( fcntl (2)) ላይ ክፍት ሆኖ እንዲቆይ ይደረጋል . የፋይል ማካካሻው የፋይሉ መጀመሪያ ላይ ተስተካክሏል.
የግብአት ጠቋሚዎች ፋይሉን ተነባቢ ብቻ, መጻፍ ወይም ማንበብ / መፃፍ, በትንሹ - ወይም 'd ከሱ ጋር ወይም ከዚያ በላይ ከሚሆኑት መካከል እንዲከፍቱ የሚጠይቁ ከ O_RDONLY, O_WRONLY ወይም O_RDWR አንዱ ነው:
O_CREAT
ፋይሉ ከሌለ አይፈጠርም. የፋይሉ ባለቤት (የተጠቃሚ መታወቂያ) ወደ ሂደቱ ውጤታማ ተጠቃሚ መታወቂያ ተቀናብሯል. የቡድን ባለቤትነት (የቡድን መታወቂያ) ለሂደቱ ውጤታማ የቡድን መታወቂያ ወይም ለወላጅ የቡድን መታወቂያ (በፋይል ዲስፋር ዓይነት እና በተርፍ አማራጮች የሚወሰን እና በወላጁ ማውጫ ሁነታ ላይ ተመስርተው, ለምሳሌ, ተራራ በኤሲፒኤስ ስርዓተ-ፋይል ውስጥ የተዘረዘሩትን ቢsdgroups እና sysvgroups , በዩኤስ ተራራ (8) ውስጥ በተገለጸው መሰረት.
O_EXCL
ከ O_CREAT ጋር ጥቅም ላይ ሲውል, ፋይሉ ቀድሞውኑ ካለ, ስህተት ነው እና ክፍተቱም አይሳካም. በዚህ ዐውደ-ጽሑፍ የትኛውም ቦታ የትኛውም ቦታ ላይ ቢሆን, ተምሳሌታዊ አገናኝ ይኖራል. O_EXCL በ NFS የፋይል ስርዓቶች ላይ ተሰብሯል ፕሮግራሞችን ለመፈተሽ በሚተማመኑ መርሃ ግብሮች ላይ የፕሮግራም የጋም ሁኔታን ያካትታል. ተቆልፈው የተሰሩትን የአቶሜትሪክ ፋይል መቆለፊያ መፍትሄ በ "fs" ላይ አንድ ልዩ ፋይል መፍጠር (ለምሳሌ የአስተናጋጅ ስም እና ፒድ), አገናኝን (2) ወደ ተቆለፈፋው አገናኝ ለማገናኘት ይጠቀሙ. አገናኝ () ድጋሚ ከሆነ 0 መቆለጡ የተሳካ ነው. አለበለዚያ የመግቢያ ቆጠራው ወደ 2 ከፍ ያደርገውን ለመፈተሽ በልዩ ፋይል ላይ የቁጥጥር (2) ተጠቀም, በተመሳሳይም መቆለጡም ስኬታማ ነው.
O_NOCTTY
የመንገድ ስም ወደ ተርሚናል መሣሪያነት የሚመለከት ከሆነ --- tty (4) --- ሂደቱ ምንም እንኳን ሂደ ቢሆንም እንኳ የሂደቱ የመቆጣጠሪያ ተርሚናል አይሆንም.
O_TRUNC
ፋይሉ ቀድሞውኑ እና መደበኛ ፋይል ከሆነ እና ክፍት ሁነታ ለመፃፍ ይፈቅዳል (ማለትም, O_RDWR ወይም O_WRONLY ነው) ይህ ለስራ ርዝመት 0.8% ይሆናል. ፋይሉ FIFO ወይም ተርሚናል የመሳሪያ ፋይል ከሆነ, የ O_TRUNC ዕልባት ችላ ይባላል. አለበለዚያ የ O_TRUNC ተጽዕኖ አልተገለጸም. (በብዙ የሊነክስ ስሪቶች ላይ ችላ ይባላል, በሌሎች ስሪቶች, ስህተት ያመጣል.)
O_APPEND
ፋይሉ በአባሪ ሁነታ ውስጥ ተከፍቷል. እያንዳንዱ ከመጻፍ በፊት, ፋይሉ ጠቋሚው በፋይሉ መጨረሻ ላይ እንደ " ሆሄ" ይታያል . ከአንድ በላይ ሂደቶች በአንድ ጊዜ ወደ አንድ ፋይል ውሂብን ካከለው O_APPEND ወደ ፋፋይ ፋይሎች በ NFS ፋይል ስርዓቶች ሊመራ ይችላል. ይህ የሆነበት ምክንያት NFS ለፋይሉ መጋበዝን ስለማይደግፍ የደንበኛውን ከርነል መሙላት አለበት ምክንያቱም ያለ ዘር ሁኔታ ሊሰራ አይችልም.
O_NONBLOCK ወይም O_NDELAY
በሚቻልበት ጊዜ ፋይሉ እገዳ በማይኖርበት ሁነታ ይከፈታል. በፋይል ፋይል ገላጭ ውስጥ የተከፈተ ወይም ምንም ተከታታይ ክወናዎች የመጠባበቂያ ሂደቱ እንዲጠብቅ አይደረግም. የ FIFOs (ስም የተሰየሙ ቱቦዎች) አያያዝን በተመለከተ fifo (4) ይመልከቱ. ይህ ሁነታ ከ FIFOs ውጪ በሆኑ ፋይሎች ላይ ምንም ተፅዕኖ አያስፈልገውም.
O_SYNC
ፋይሉ ለ I / O ቅንጅቶች ተከፍቷል. በተጠቀሰው የፋይል ገላጭ ላይ ያሉ ማንኛቸውም ፃፎች ውሂቡ ወደ አካውንቱ መሰረተ ሃይል እስከሚጻጻቸው ድረስ የስልክ ሂደቱን ያግደዋል. ከዚህ በታች ያለውን የ RESTRICTIONS ይመልከቱ.
O_NOFOLLOW
የጎዳና ስምያዊ ተምሳሌት ከሆነ, ክፍት አልተሳካም. ይህ የ FreeBSD ቅጥያ ነው, እሱም ወደ ሊነክስ በ 2.1.126 ውስጥ ተጨምሯል. በቀዳሚዎቹ የቀድሞ ስሪት አካል ውስጥ ተምሳሌታዊ አገናኞች አሁንም ይከተላሉ. ከ glibc 2.0.100 እና ከዚያ በኋላ ያሉ አርእስት የዚህ ባንዲራ ትርጉም ይገኙበታል; ከ 2.1.126 በፊት ከርሰሉ ከስራ ችላ ያደርገዋል .
O_DIRECTORY
የመንገድ ስም ማውጫ ካልሆነ ክፍት እንዲከፈት ያድርጉት. ይህ ዕልባት ሊነበብ የሊነክስ-ተኮር ነው, እናም በ
O_DIRECT
የዚህ አይነ ውስጥ / I / O መሸጎጫ ውጤቶችን ለመቀነስ ይሞክሩ. በአጠቃላይ ይህ አፈጻጸምን ያቃልላል, ነገር ግን ትግበራዎች እራሳቸውን በራሳቸው ሲሸጎጡ እንደ ልዩ ሁኔታዎች በተለይ ጠቃሚ ነው. የፋይል / I / O ፋይል በቀጥታ ወደ / ከተጠቃሚ ክፍት ታጋቢዎች ነው. I / O ማሳመር ሲሆን ይህም ማለት የንባብ (2) ወይም (2) የስልዓት ጥሪ ሲጠናቀቅ መረጃው እንደተላለፈ ይጠበቃል. የዝውውር መጠናቸውን, እና የተጠቃሚ ድርጭትና የፋይል መቅረጫ አቀማመጥ የሁሉም የፋይል ስርዓቱ የሎጂክ ጥግ መጠን ነው.
ይህ ጥቆማ በበርካታ ዩኒክስ-በመሳሰሉ ስርዓቶች ላይ ይደገፋል. ድጋፍ በ Linux ስርዓተ ክወና ስሪት 2.4.10 ውስጥ ታክሏል.
በማገጃ መሳሪያዎች ላይ ተመሳሳይ ተመሳሳይ በይነገጽ በጥቁር (8) ውስጥ ተገልጧል.
O_ASYNC
አንድ ምልክት (SIGIO በነባሪነት ያመንጩ, ሆኖም ግን በዚህ የፋይል ገላጭ ውስጥ ግብዓት ወይም ውጤት በሚኖርበት ጊዜ ይሄ በ fcntl (2) በኩል ሊቀየር ይችላል. ይህ ባህርይ ለመገልገያዎች, ለስልክ-ታች ጫፎች, እና ሶኬቶች ብቻ ይገኛል. ተጨማሪ ዝርዝሮችን ለማግኘት fcntl (2) ን ይመልከቱ.
O_LARGEFILE
ትልቅ የፋይል ስርዓትን የሚደግፉ 32-ቢት ስርዓቶች, መጠናቸው የ 31 ቢት ውሎች እንዲከፈቱ አይፈቀድላቸው.
ከነዚህ የአማራጭ ባንዲራዎች መካከል ፋይሉ ከተከፈተ በኋላ fcntl ን በመጠቀም ሊለወጥ ይችላል.
የክርክሬሽን ሞድ አዲስ ፋይል ለመፍጠር ጥቅም ላይ የሚውል ፍቃዶችን ይገልፃል. በተለመደው መንገድ በሂደቱም ጭማሬ ይሻሻላል ; የፈጠሩትን ፋይሎች ፍቃዶች (ሁኔታ እና ----ummask) ናቸው . ይህ አሠራሩ ወደፊት ለሚፈጠረው አዲስ ፋይል መዳረስ ብቻ እንደሚሠራ ልብ ይበሉ; ተነባቢ ብቻ ፋይል የሚፈጥር ክፍት ጥሪ የንባብ / የመፃፍ ፋይል ገላጭ ሊመልስ ይችላል.
የሚከተሉት ምሳሌያዊ ቋሚዎች ለአውራሻዎች ተዘጋጅተዋል.
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 ጋር እኩል በሆነ መልኩ ባንዲራዎች ጋር እኩል ነው.
VALUE RETURN
ክፍት እና ፈጠራውን አዲስ የፋይል ገላጭ ይመልሳል, ወይም -1 ስህተት ከተከሰተ (ስህተት በሆነ ሁኔታ ስህተት በተገቢ ሁኔታ ከተቀናበረ). ማሳያው የልዩ ልዩ ፋይሎች መክፈት መቻሉን ልብ ይበሉ, ነገር ግን ፈጠሩ ሊፈጥር አይችልም - በምትኩ mknod (2) ይጠቀሙ.
በ NFS የፋይል ስርዓቶች በ UID ማፒዲንግ የነቃ, የፋይሉ ገላጭ ምስል ሊመልስ ይችላል, ነገር ግን ለምሳሌ (2) ማንበብ በ EACCES ውድቅ ተደርጓል. ይህ የሆነው ደንበኛው ፍቃዶቹን በመፈተሸ ክፍተቱን ሲያከናውን ነው, ነገር ግን የዩአይፒ ማድረጊያ አሰራሮች ሲነበቡ እና ሲጽፉ በአገልጋዩ ይከናወናል.
ፋይሉ አዲስ ከተፈጠረ, የአስፈላጊነቱ, የጊዜ ሰአት, የሙሌት መስኮቹ በአሁኑ ጊዜ ተስተካክለዋል, እንዲሁም የወላጅ ዳይሬክቶች የጊዜ ሰአት እና የሙሉ መስኮች ናቸው. አለበለዚያ, በ O_TRUNC ዕልባት ምክንያት ፋይሉ ከተስተካከለ, የጊፒኤም እና የምርት መስኮቹ ለአሁኑ ሰዓት ተስተካክለዋል.
ስህተቶች
ዘይቤው
የጎዳና ስም አስቀድሞም ይገኛል እና O_CREAT እና O_EXCL ጥቅም ላይ ውለዋል.
EISDIR
የስምሪት ስም ማውጫውን የሚመለከት ሲሆን ጉዳዩም የተጠየቀው መዳረሻ (ማለት, O_WRONLY ወይም O_RDWR ተዘጋጅቷል).
EACCES
የፋይሉ የተጠየቀው መዳረሻ አይፈቀድም, ወይም በፍለጋ ውስጥ ከነበሩት ማውጫ ውስጥ አንዱ ፍለጋ (ፍቃድ) አልፈቀደም, ወይም ፋይሉ ያልነበረ እና የወላጅ ማውጫ ላይ የመፃፍ ፍቃድ አይፈቀድም.
ENAMETOOLONG
የጎዳና ስም በጣም ረጅም ነበር.
ENOENT
O_CREAT አልተዘጋጀም እና የተሰየመው ፋይል አይገኝም. ወይም, በስምሪት ስም ውስጥ የአድራሻ ክፍል የለም, ወይም ተያያዥነት ያለው ተምሳሌታዊ አገናኝ አይደለም.
ENOTDIR
በመንገድ ስሙ ውስጥ እንደ ማውጫ ስራ ላይ የሚውለው ክፍል, በእውነቱ, ማውጫ አይደለም, ወይም O_DIREGORY ተለይቶ እና የስም ርእስ ማውጫ አልነበረም.
ENXIO
O_NONBLOCK | O_WRONLY ተቀናብሯል, የተሰየመው ፋይል FIFO ነው, እና ፋይሉ ለንባብ ክፍት ነው. ወይም, ፋይሉ የመሳሪያ ፋይል ነው, እና ምንም ተጓዳኝ መሣሪያ የለም.
ENODEV
የስምሪት ስም ለአንድ መሣሪያ ልዩ ፋይል ነው እናም ምንም ተጓዳኝ መሣሪያ አይገኝም. (ይህ የ Linux kernel bug ነው - በዚህ ሁኔታ ENXIO መመለስ አለበት.)
EROFS
ዱካ ስሪት በአንድ ተነባቢ ስርዓተ ፋይል ውስጥ ያለ ፋይልን ያመለክታል እና የመዳረሻ ፍቃድ ተጠይቋል.
ኢቴፕስሲ
የስምሪት ስም በአሁኑ ጊዜ በመፈጸም ላይ የሚገኝ እና ተፈፃሚ የመፃፍ ጥያቄን ተጠይቋል.
EFAULT
የአካባቢያዊ ስም ነጥቦች ከአቅራቢው የአድራሻ ቦታ ውጭ.
ELOOP
የጎዳና ስምን በመፍታት ላይ ብዙ ተምሳሌታዊ አገናኞች ተገኝተዋል, ወይም O_NOFOLLOW ተገልጿል, ነገር ግን የስም ርእስ ተምሳሌት ነው.
ENOSPC
የጎዳና ስም መፈጠር ነበረበት ነገር ግን የስምሪት ስም ያለው መሳሪያ ለአዲሱ ፋይል ቦታ የለውም.
ENOMEM
በቂ ያልሆነ የከርነል ማህደረ ትውስታ አለ.
EMFILE
ሂደቱ ከፍተኛው የፋይሎች ብዛት ክፍት ነው.
ENFILE
በስርዓቱ ላይ የተከፈቱ የፋይሎች ብዛት ገደብ ላይ ተደርሷል.
Conforming to
SVR4, SVID, POSIX, X / OPEN, BSD 4.3 የ O_NOFOLLOW እና O_DIRECTORY ባንዲራዎች ሊነክስ ናቸው. አንድ ሰው የእነሱን መግለጫዎች ለማግኘት የ _GNU_SOURCE ማክሮን መግለፅ ሊኖርበት ይችላል.
ገደቦች
በ NFS ውስጥ በተገለፀው ፕሮቶኮል ውስጥ ብዙ ችግር አለ, ይህም ከ O_SYNC እና O_NDELAY መካከል ተጽዕኖ ያደርስበታል .
POSIX ለሦስት የተለያዩ አይነት I / O የተመሳሰሉ የማመሳሰያ አማራጮችን ያቀርባል, ከባንሮች O_SYNC , O_DSYNC እና O_RSYNC ጋር ይመሳሰላል . በአሁኑ ጊዜ (2.1.130) እነዚህ ሁሉ ከሊነክስ ጋር ተመሳሳይ ናቸው.