សង្ខេប
#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 mode ); int creation (const char * pathname របៀប mode_t );ការពិពណ៌នា
ពាក្យបញ្ជា ប្រព័ន្ធ បើកចំហ () ពាក្យបញ្ជា linux ត្រូវបានប្រើដើម្បីបម្លែងឈ្មោះផ្លូវទៅជាកម្មវិធីពិពណ៌នាឯកសារ (តូចតូចលេខអវិជ្ជមានសម្រាប់ប្រើក្នុង I / O ជាបន្តបន្ទាប់ជាមួយនឹង អាន សរសេរ ។ ល។ ) ។ នៅពេលការហៅបានជោគជ័យអ្នកពិពណ៌នា ឯកសារដែលបាន ត្រឡប់នឹងក្លាយជាកម្មវិធីពិពណ៌នាឯកសារទាបបំផុតដែលមិនបើកដំណើរការសម្រាប់ដំណើរការនេះ។ ការហៅនេះបង្កើតឯកសារបើកថ្មីមិនត្រូវបានចែករំលែកជាមួយដំណើរការផ្សេងទៀតទេ។ (ប៉ុន្តែឯកសារបើកចំហដែលបានចែករំលែកអាចកើតឡើងតាមរយៈការហៅប្រព័ន្ធ ហ្វា (2) ។ ) កម្មវិធីពិពណ៌នាឯកសារថ្មីត្រូវបានកំណត់ឱ្យបើកដំណើរការនៅលើអនុគមន៍ exec (សូមមើល fcntl (2)) ។ ឯកសារអុហ្វសិតត្រូវបានកំណត់ទៅជាដំបូងនៃឯកសារ។
ទង់ ប៉ារ៉ាម៉ែត្រគឺជា O_RDONLY , O_WRONLY ឬ O_RDWR ដែលស្នើសុំបើកឯកសារបានតែអានតែសរសេរឬអាន / សរសេររៀងៗខ្លួនអញ្ចឹង - ឬ 'd ដោយសូន្យឬច្រើនជាងនេះដូចខាងក្រោម:
O_CREAT
ប្រសិនបើឯកសារមិនមានវានឹងត្រូវបានបង្កើត។ ម្ចាស់ (លេខសម្គាល់អ្នកប្រើ) នៃឯកសារត្រូវបានកំណត់ទៅលេខសម្គាល់អ្នកប្រើដែលមានប្រសិទ្ធិភាពនៃដំណើរការ។ ភាពជាម្ចាស់ក្រុម (លេខសម្គាល់ក្រុម) ត្រូវបានកំណត់ទៅលេខសម្គាល់ក្រុមដែលមានប្រសិទ្ធិភាពនៃដំណើរការឬទៅលេខសម្គាល់ក្រុមនៃថតមេ (អាស្រ័យលើប្រភេទប្រព័ន្ធឯកសារនិងជម្រើសម៉ោននិងរបៀបនៃថតមេមើលឧ។ ម៉ោន។ ជម្រើស bsdgroups និង sysvgaps នៃប្រព័ន្ធឯកសារ ext2 ដូចបានរៀបរាប់ក្នុង ម៉ោន (8)) ។
O_EXCL
នៅពេលប្រើជាមួយ O_CREAT ប្រសិនបើឯកសារមានរួចហើយវាគឺជាកំហុសហើយការ បើក នឹងបរាជ័យ។ នៅក្នុងបរិបទនេះតំណនិមិត្តសញ្ញាមួយមានវត្តមាន, ដោយមិនគិតពីកន្លែងដែលចំណុចរបស់វា។ O_EXCL ត្រូវបានខូចនៅលើ ប្រព័ន្ធឯកសារ NFS កម្មវិធីដែលពឹងផ្អែកលើវាដើម្បីអនុវត្តភារកិច្ចចាក់សោនឹងមានលក្ខខណ្ឌប្រណាំងមួយ។ ដំណោះស្រាយសម្រាប់ដំណើរការឯកសារអាតូមដោយប្រើឯកសារជាប់សោគឺបង្កើតឯកសារតែមួយគត់នៅលើ fs ដូចគ្នា (ឧ។ បញ្ចូលឈ្មោះម៉ាស៊ីននិងភីឌី) ប្រើ តំណ (2) ដើម្បីបង្កើតតំណភ្ជាប់ទៅឯកសារជាប់សោ។ ប្រសិនបើ ភ្ជាប់ () ត្រឡប់ 0 នោះសោនេះទទួលបានជោគជ័យ។ បើមិនដូច្នោះទេត្រូវប្រើ stat (2) លើឯកសារតែមួយគត់ដើម្បីពិនិត្យមើលថាតើការរាប់តំណរបស់វាបានកើនឡើងដល់ 2 ឬយ៉ាងណា, ក្នុងករណីដែលសោបានជោគជ័យ។
O_NOCTTY
ប្រសិនបើ ឈ្មោះផ្លូវ សំដៅទៅលើឧបករណ៍ស្ថានីយ --- សូមមើល tty (4) --- វានឹងមិនក្លាយជាស្ថានីយត្រួតពិនិត្យដំណើរការទេទោះបីជាដំណើរការមិនមានក៏ដោយ។
O_TRUNC
ប្រសិនបើឯកសារមានរួចហើយនិងជាឯកសារធម្មតាហើយរបៀបបើកដំណើរការអនុញ្ញាតឱ្យសរសេរ (ឧ។ O_RDWR ឬ O_WRONLY) វានឹងត្រូវបានកាត់ត្រឹមប្រវែង 0. ប្រសិនបើឯកសារជាឯកសារឧបករណ៍ FIFO ឬឧបករណ៍ស្ថានីយទង់ O_TRUNC ត្រូវបានមិនអើពើ។ បើមិនដូច្នោះទេឥទ្ធិពលនៃ O_TRUNC មិនត្រូវបានបញ្ជាក់។ (នៅលើ កំណែ លីនុចជាច្រើនវានឹងមិនត្រូវបានអើពើនៅលើកំណែផ្សេងទៀតវានឹងត្រឡប់កំហុសមួយ។ )
O_APPEND
ឯកសារត្រូវបានបើកនៅក្នុងរបៀបបន្ថែម។ មុនពេល សរសេរ នីមួយៗចង្អុលឯកសារត្រូវបានដាក់នៅខាងចុងឯកសារដូចជាជាមួយនឹង lseek ។ O_APPEND អាចនាំឱ្យមានឯកសារខូចនៅលើប្រព័ន្ធឯកសារ NFS ប្រសិនបើដំណើរការច្រើនជាងមួយបញ្ចូលទិន្នន័យទៅឯកសារក្នុងពេលតែមួយ។ នេះដោយសារតែ NFS មិនគាំទ្រការបន្ថែមទៅឯកសារនោះដូច្នេះខឺណែលម៉ាស៊ីនត្រូវក្លែងធ្វើវាដែលមិនអាចធ្វើបានដោយគ្មានលក្ខខណ្ឌប្រណាំង។
O_NONBLOCK ឬ O_NDELAY
នៅពេលអាចធ្វើបានឯកសារត្រូវបានបើកនៅក្នុងរបៀបដែលមិនរារាំង។ ទាំងការ បើកចំហរ និងប្រតិបត្ដិការជាបន្តបន្ទាប់នៅលើកម្មវិធីពិពណ៌នាឯកសារដែលត្រូវបានត្រឡប់មកវិញនឹងធ្វើឱ្យដំណើរការហៅទូរស័ព្ទដើម្បីរង់ចាំ។ ចំពោះការគ្រប់គ្រង FIFOs (បំពង់ដែលមានឈ្មោះ) សូមមើលផងដែរ FIFO (4) ។ របៀបនេះមិនចាំបាច់មានឥទ្ធិពលលើឯកសារផ្សេងក្រៅពី FIFOs ទេ។
O_SYNC
ឯកសារត្រូវបានបើកសម្រាប់ I / O ដែលមានសមកាលកម្ម។ រាល់ការ សរសេរ លើប្រព័ន្ធពិពណ៌នាឯកសារលទ្ធផលនឹងរារាំងដំណើរការហៅទូរស័ព្ទរហូតទាល់តែទិន្នន័យត្រូវបានសរសេរទៅផ្នែករឹងមូលដ្ឋាន។ សូមមើល RESTRICTIONS ខាងក្រោម, ទោះបីជា។
O_NOFOLLOW
ប្រសិនបើ ឈ្មោះផ្លូវ គឺជាតំណនិមិត្តសញ្ញានោះការបើកចំហរបរាជ័យ។ នេះគឺជាផ្នែកបន្ថែម FreeBSD ដែលត្រូវបានបន្ថែមទៅ Linux នៅក្នុងកំណែ 2.1.126 ។ តំណនិមិត្តសញ្ញានៅក្នុងសមាសធាតុមុនរបស់ឈ្មោះផ្លូវនឹងនៅតែត្រូវបានអនុវត្ត។ បឋមកថាពី glibc 2.0.100 និងក្រោយមករួមបញ្ចូលនិយមន័យនៃទង់ជាតិនេះ; ខឺណែលមុន 2.1.126 នឹងមិនអើពើវាបើប្រើ ។
O_DIRECTORY
ប្រសិនបើ ឈ្មោះផ្លូវ មិនមែនជាថត, បណ្តាលឱ្យបរាជ័យបើក។ ទង់នេះគឺជាលីនុចជាក់លាក់ហើយត្រូវបានបន្ថែមនៅក្នុងកំណែខឺណែល 2.1.126 ដើម្បីជៀសវាងបញ្ហានៃការបដិសេធនៃបញ្ហាប្រសិនបើ opendir (3) ត្រូវបានហៅលើឧបករណ៍ FIFO ឬកាសែតប៉ុន្តែមិនគួរត្រូវបានប្រើខាងក្រៅការអនុវត្តកម្មវិធី។ ។
O_DIRECT
សូមព្យាយាមបង្រួមអប្បបរមានៃផលប៉ះពាល់នៃឃ្លាំងសម្ងាត់ I / O ទៅនិងពីឯកសារនេះ។ ជាទូទៅវានឹងបន្ថយការសម្តែងប៉ុន្តែវាមានប្រយោជន៍ក្នុងស្ថានភាពពិសេសដូចជាពេលកម្មវិធីដំណើរការឃ្លាំងសម្ងាត់ផ្ទាល់ខ្លួន។ ឯកសារ I / O ត្រូវបានធ្វើដោយផ្ទាល់ទៅ / ពីសតិបណ្តោះអាសន្នរបស់អ្នកប្រើ។ I / O គឺជាការធ្វើសមកាលកម្មពោលគឺនៅពេលបញ្ចប់នៃការហៅទូរស័ព្ទការ អាន (2) ឬ សរសេរ (2) ទិន្នន័យត្រូវបានធានាថាត្រូវបានផ្ទេរ។ ទំហំផ្ទេរនិងតម្រឹមនៃសតិបណ្តោះអាសន្នរបស់អ្នកប្រើនិងអុហ្វសិតឯកសារត្រូវតែជាពហុគុណនៃទំហំប្លុកឡូជីខលនៃប្រព័ន្ធឯកសារ។
ទង់នេះត្រូវបានគាំទ្រលើប្រព័ន្ធមួយចំនួនដូចជាយូនីក។ ការគាំទ្រត្រូវបានបន្ថែមនៅក្រោម Linux ក្នុងកំណែខឺណែល 2.4.10 ។
ចំណុចប្រទាក់ស្រដៀងគ្នាសម្រាប់ semantically ឧបករណ៍ប្លុកត្រូវបានពិពណ៌នានៅក្នុង វត្ថុធាតុដើម (8) ។
O_ASYNC
បង្កើតសញ្ញា (SIGIO តាមលំនាំដើមប៉ុន្តែវាអាចត្រូវបានផ្លាស់ប្ដូរតាមរយៈ fcntl (2)) ពេលបញ្ចូលឬទិន្នផលអាចមាននៅលើកម្មវិធីពិពណ៌នាឯកសារនេះ។ លក្ខណៈពិសេសនេះអាចប្រើបានសម្រាប់ស្ថានីយសេះប្រញាយនិងរន្ធ។ សូមមើល fcntl (2) សម្រាប់ព័ត៌មានបន្ថែម។
O_LARGEFILE
នៅលើប្រព័ន្ធ 32 ប៊ីតដែលគាំទ្រប្រព័ន្ធឯកសារធំអនុញ្ញាតឱ្យឯកសារដែលទំហំរបស់វាមិនអាចត្រូវបានតំណាងនៅក្នុង 31 ប៊ីតត្រូវបានបើក។
ទង់ជម្រើសមួយចំនួនទាំងនេះអាចត្រូវបានប្តូរដោយប្រើ fcntl បន្ទាប់ពីឯកសារត្រូវបានបើក។
របៀប អាគុយម៉ង់បញ្ជាក់សិទ្ធិដើម្បីប្រើក្នុងករណីឯកសារថ្មីត្រូវបានបង្កើត។ វាត្រូវបានកែប្រែដោយ umask របស់ដំណើរការក្នុងវិធីធម្មតា: សិទ្ធិរបស់ឯកសារដែលបានបង្កើតគឺ (របៀប & umask) ។ ។ ចំណាំថារបៀបនេះអនុវត្តចំពោះការចូលដំណើរការពេលក្រោយនៃឯកសារដែលបានបង្កើតថ្មីៗប៉ុណ្ណោះ & # 160; ។ ការហៅ បើក ដែលបង្កើតឯកសារបានតែអានអាចត្រឡប់កម្មវិធីពិពណ៌នាឯកសារអាន / សរសេរ។
ថេរនិមិត្តសញ្ញាដូចខាងក្រោមត្រូវបានផ្ដល់សម្រាប់ របៀប :
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 ប្រសិនបើកំហុសបានកើតឡើង (ក្នុងករណីណា errno ត្រូវបានកំណត់ឱ្យបានត្រឹមត្រូវ) ។ ចំណាំថាការ បើកចំហ អាចបើកឯកសារពិសេសឧបករណ៍ប៉ុន្តែការ បង្កើត មិនអាចបង្កើតវាបានទេ - ប្រើ mknod (2) ជំនួសវិញ។
នៅលើប្រព័ន្ធឯកសារ NFS ដែលបានបើកការធ្វើផែនទី UID បើក អាចត្រឡប់កម្មវិធីពិពណ៌នាឯកសារប៉ុន្តែឧទាហរណ៍ការ អាន (2) ត្រូវបានបដិសេធដោយ EACCES ។ នេះគឺដោយសារតែម៉ាស៊ីនភ្ញៀវដំណើរការដោយការត្រួតពិនិត្យសិទ្ធិប៉ុន្តែការធ្វើផែនទី UID ត្រូវបានអនុវត្តដោយម៉ាស៊ីនបម្រើនៅពេលដែលសំណើសរសេរនិងសរសេរ។
ប្រសិនបើឯកសារត្រូវបានបង្កើតថ្មីវាលពេលវេលា, ពេលវេលា, វាលពេលវេលារបស់វាត្រូវបានកំណត់ទៅពេលបច្ចុប្បន្ននិងដូច្នេះគឺវាលពេលវេលា ctime និង mtime នៃថតមេ។ បើមិនដូច្នោះទេប្រសិនបើឯកសារត្រូវបានកែប្រែដោយសារតែទង់ O_TRUNC វាលពេលវេលានិងពេលវេលារបស់វាត្រូវបានកំណត់នៅបច្ចុប្បន្ន។
កំហុស
អាមេរិច
ឈ្មោះផ្លូវ មានរួចហើយហើយ O_CREAT និង O_EXCL ត្រូវបានប្រើ។
EISDIR
ឈ្មោះផ្លូវគឺ សំដៅទៅលើថតហើយការចូលដំណើរការត្រូវបានស្នើសុំដែលពាក់ព័ន្ធ (នោះគឺ O_WRONLY ឬ O_RDWR ត្រូវបានកំណត់) ។
EACCES
ការចូលទៅឯកសារដែលបានស្នើសុំមិនត្រូវបានអនុញ្ញាតឬថតមួយក្នុងបញ្ជី ឈ្មោះផ្លូវ មិនអនុញ្ញាតការអនុញ្ញាតស្វែងរកឬឯកសារមិនទាន់មានហើយសិទ្ធិសរសេរទៅថតមេមិនអនុញ្ញាតទេ។
ENAMETOOLONG
ឈ្មោះផ្លូវ វែងពេក។
សូមជូនពរ
O_CREAT មិនត្រូវបានកំណត់ហើយឯកសារដែលមានឈ្មោះមិនមានទេ។ ឬសមាសភាគថតនៅក្នុង ឈ្មោះផ្លូវ មិនមានឬជាតំណនិមិត្តសញ្ញា dangling ។
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 មានលក្ខណៈពិសេសរបស់ លីនុច ។ មួយអាចត្រូវកំណត់ម៉ាក្រូ _GNU_SOURCE ដើម្បីទទួលបាននិយមន័យរបស់វា។
ការរឹតត្បិត
មាន infelicities ជាច្រើននៅក្នុងពិធីការដែលមានមូលដ្ឋាន NFS ដែលប៉ះពាល់ក្នុងចំណោម O_SYNC និង O_NDELAY ។
POSIX ផ្តល់ជូននូវវ៉ារ្យង់ចំនួនបីខុសគ្នានៃ I / O ដែលបានធ្វើសមកាលកម្មដែលត្រូវគ្នាទៅនឹងទង់ O_SYNC , O_DSYNC និង O_RSYNC ។ បច្ចុប្បន្ន (2.1.130) ទាំងអស់នេះសុទ្ធតែមានន័យដូចគ្នាលីនុច។