Linux විධාන විවෘත කරන්න

සාරාංශය

#include << A HREF = "ගොනුව: /usr/include/sys/types.h"> sys / types.h> #include << A HREF = "ගොනුව: /usr/include/sys/stat.h"> sys / stat.h> #include << A HREF = "ගොනුව: /usr/include/fcntl.h"> fcntl.h> int විවෘත (const char * pathname , int flags ); int විවෘත (const char * pathname , int flags , mode_t mode ); int creat (const char * pathname , mode_t මාතය );

විස්තර

විවෘත () පද්ධති ඇමුණුම linux විධානය මඟින් ගොනු විස්තරයක් (path) ලෙසට පරිවර්තනය කිරීම සඳහා භාවිතා කරනු ලැබේ (කුඩා, ඍණ අගයක් ලෙස කියවීම , ලිවීම , ආදී වශයෙන් I / O භාවිතය සඳහා ඍණ අගයක් නැත). ඇමතුම සාර්ථක වන විට, ගොනු විස්තරය නැවතත් ක්රියාවලිය සඳහා දැනට නොපවතින ලද අවම ගොනු විස්තරය විය යුතුය. මෙම ඇමතුම නව විවෘත ගොනුවක් නිර්මාණය කරයි, වෙනත් ක්රියාවලිය සමඟ බෙදා නොගනී. (නමුත් වින්ඩෝස් (2) පද්ධති ඇමතුම හරහා බෙදාගන්නා ලද විවෘත ගොනු ඇතිවිය හැක.) නව ගොනු විස්තරය exec කර්තව්යයන් හරහා විවෘතව තබනු ලැබේ ( fcntl (2) බලන්න). ගොනු ප්රතිස්ථාපනය ගොනුව ආරම්භයේ සිට ඇත.

පරාමිතීය ධජයන් O_RDONLY , O_WRONLY හෝ O_RDWR වලින් එකක් ලෙස කියවීමට පමණක්, ලිවීමට පමණක් හෝ කියවීම / ලිවීම් පිළිවෙලින්, බිටු- හෝ 'd' හෝ ඊට වඩා පහත දැක්වෙන ආකාරයෙන් d:

O_CREAT

ගොනුව නොමැති නම් එය නිර්මාණය වනු ඇත. ගොනුවෙහි අයිතිකරු (පරිශීලක හැඳුනුම් අංකය) ක්රියාවලියෙහි ඵලදායී පරිශීලක හැඳුනුම්පත සකසා ඇත. කණ්ඩායම් හිමිකම (කණ්ඩායම් හැඳුනුම් අංකය) ක්රියාවලියෙහි ඵලදායි කණ්ඩායම් හැඳුනුම් අංකය හෝ මාපිය බහලුමේ කණ්ඩායම් හැඳුනුම් අංකය (හෝ ගොනු පද්ධතියේ වර්ගය සහ ස්ථාපන විකල්ප මත සහ මාපිය බහලුමේ මාතය අනුව, බලන්න, උදාහරණ බලන්න, බලන්න mount (8) ලෙස විස්තර කර ඇති ext2 ගොනු පද්ධතියේ bsdgroups සහ sysvgroups .

O_EXCL

O_CREAT සමග භාවිතා කරන විට, ගොනුව දැනටමත් පවතී නම් එය දෝශයක් වන අතර විවෘත අසාර්ථක වේ. මෙම සන්දර්භය තුළ එහි සංකේතාත්මක සබැඳියක් පවතියි. NFS ගොනු පද්ධති මත O_EXCL කැඩී බිඳී යාමේ කර්තව්යයන් මත රඳා පවතින වැඩසටහන් ධාවන කොන්දේසියක් අඩංගු වේ. යතුරුපුවරු ගොනුවක් භාවිතා කරමින් පරමාණුක ගොනු ගොනු අගුලු දැමීම සඳහා වන විසඳුම වන්නේ එකම fs එකෙහි අනන්ය ගොනු නිර්මාණය කිරීමයි (උදාහරණ ලෙස, ධාරක නාමය සහ pid ඇතුලත් කිරීම), සබැඳිය (2) සම්බන්ධ කිරීම සඳහා යතුරක් සම්බන්ධ කිරීමක් සිදුකිරීමට. Link () 0 නම්, අගුල සාර්ථක වේ. එසේ නොමැතිනම්, එහි සබැඳි ගණනය කිරීම් සංඛ්යාව 2 දක්වා වැඩි කර ඇත්දැයි පරීක්ෂා කිරීම සඳහා අද්විතීය ගොනුව මත stat (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 හැසිරවීම සඳහා (නම් කරන ලද පයිප්ප), ෆයිඩෝ (4) බලන්න. මෙම ආකෘතිය FIFO හැර අනෙකුත් ගොනු කෙරෙහි කිසිදු බලපෑමක් අවශ්ය නොවේ.

O_SYNC

සමමුහුර්ත I / O සඳහා ගොනුව විවෘත වේ. මෙහි ප්රතිඵලයක් ලෙස ගොනු විස්තරයේ ඕනෑම ලියුමක් සවි කර ඇති ක්රියාවලිය අවහිර කරනු ලැබේ. දත්ත භෞතිකව ලුහුඩු දෘඩාංග වෙත ලියා ඇත. කෙසේ වෙතත් අඩුපාඩුකම් බලන්න.

O_NOFOLLOW

පේජිනම් සංකේතාත්මක ඈඳියක් නම්, විවෘතව අසමත් වේ. මෙය FreeBSD දිගුවකි. එය 2.1.126 අනුවාදයට එක් කරන ලදී. පේළි නාමයෙහි පෙර සංරචකවල සංකේතාත්මක ඈඳියන් තවමත් අනුගමනය කරනු ලැබේ. Glibc 2.0.100 සිට පසුව මෙම ධජයේ අර්ථ දැක්වීම ඇතුළත් වේ; 2.1.126 ට පෙර කර්නල් භාවිතා කළහොත් එය නොසලකා හරිනු ඇත .

O_Directory

පේළිය ඩිරෙක්ටරියක් නොවේ නම්, විවෘත කිරීමට අසමත් වන්න. මෙම ධජය ලිනක්ස් විශේෂිත වන අතර එය opendir (3) FIFO හෝ ටේප් උපාංගයක් මත නම්, ප්රතික්ෂේප කිරීමේ සේවා ගැටළු මඟ හැරීම සඳහා කර්නල් වෙළුමේ 2.1.126 එකතු කරන ලදී, නමුත් opendir .

O_DIRECT

I / O මෙම ගොනුවේ සිට සහ සිට මෙම හැඹිලි බලපෑම් අවම කිරීමට උත්සාහ කරන්න. සාමාන්යයෙන් මෙය කාර්ය සාධනය අඩු කර ගත හැකි වුවද, යෙදුම් යෙදීම් වලදී ඔවුන්ගේ සුවිශේෂී ගවේෂණ වලදී විශේෂ අවස්ථාවන්හිදී ප්රයෝජනවත් වේ. I / O ගොනුව පරිශීලක සාවද්ය බෆර් වලින් / කෙළින්ම සිදු කරනු ලැබේ. I / O සමමුහුර්ත වේ, එනම් කියවීමට (2) හෝ ලිවීමේ (2) පද්ධති ඇමුණුම සම්පූර්ණ කිරීමෙන් පසුව දත්ත මාරු කර ඇත. ස්ථාන මාරු කිරීම්, පරිශීලක බෆරය සහ ගොනු ප්රතිස්ථාපනය පෙළගැස්වීම ගොනු පද්ධතියේ තාර්කික බ්ලොක් ප්රමාණයෙන් ගුණ විය යුතුය.
මෙම ධජය Unix-සමාන පද්ධති මත පදනම්ව සහාය ලබයි; කර්නලය 2.4.10 යටතේ ලිනක්ස් යටතේ ආධාරකයක් එකතු කරන ලදි.
බ්ලොක් උපාංග සඳහා සංකේතාත්මක ආකාරයේ අතුරු මුහුනුවක් අමු (8) වේ.

O_ASYNC

සංඥාවක් උත්පාදනය කරන්න (SIGIO පෙරනිමිය ලෙසින්, නමුත් මෙම ගොනු විස්තරය සඳහා ආදාන හෝ ප්රතිදාන කළ හැකි විට fcntl (2) හරහා මෙය වෙනස් කළ හැක. මෙම අංගය සඳහා පමණක්, පර්යන්ත, ව්යාජ-පර්යන්ත සහ සොකට්ටු සඳහා පමණි. වැඩිදුර විස්තර සඳහා fcntl (2) බලන්න.

O_LARGEFILE

විශාල ගොනු පද්ධති සඳහා වන 32-bit පද්ධති මත බිට් 31 විවෘත කළ යුතු ගොනු ප්රමාණය ප්රමාණවත් නොවේ.

ගොනුව විවෘත කිරීමෙන් පසුව fcntl භාවිතයෙන් මෙම විකල්ප ධජ සමහරක් වෙනස් කළ හැකිය.

නව ගොනුවක් සාදන අවස්ථාවක දී භාවිතා කිරීමට අවසර ලබා දෙනු ඇත. සාමාන්යයෙන් ක්රියාදාමය විසින් සිදුකරන ක්රියාපටිපාටිය අනුව එය වෙනස් කර ඇත: Created file of permissions (mode & ~ 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) භාවිතා කරන්න.

NFS ගොනු පද්ධති UID සිතියම්කරණය මඟින් සක්රීය කර ඇති අතර, විවෘත කිරීමේදී ගොනු විස්තරයක් ලබා ගත හැකි නමුත් උදාහරණ කියවීමට (2) ඉල්ලීම් EACCES මගින් ප්රතික්ෂේප කරනු ලැබේ . මෙය සේවාදායකයන් විසින් අවසර ලබා දීමේදී විවෘතව සිදු කරන නිසා, කියවීම සහ ලිවීම් ඉල්ලීම මත සේවාදායකය විසින් UID සිතියම්කරණය සිදු කරනු ලැබේ.

ගොනුව අලූතින්ම නිර්මාණය කර ඇත්නම්, එහි atime, ctime, mtime ක්ෂේත්ර වත්මන් වේලාවට සකසා ඇති අතර, එම නිසා මාපිය බහලුමේ සිට ctime සහ mtime ක්ෂේත්රයන් වේ. එසේ නොමැතිනම්, O_TRUNC ධජය නිසා ගොනුව වෙනස් කර ඇත්නම්, එහි වේලාව සහ mtime යන ක්ෂේත්රයන් දැනට පවතින කාලය දක්වා සකසා ඇත.

වැරදි

ඉරිස්ට්

පේජරයක් දැනටමත් පවතින අතර O_CREAT සහ O_EXCL භාවිතා කර ඇත.

EISDIR

pathname යනු ඩිරෙක්ටරියක් හා ඉල්ලූ ප්රවේශය ඇතුළත් කිරීම ලිවීමට (එනම්, O_WRONLY හෝ O_RDWR පිහිටුවා ඇත).

ඉරාක

ගොනුව වෙත ඉල්ලූ පෙත්සම අවසර නැත, හෝ පේජරයේ එක් බහලුමක් අවසර නැත (ක්රියාත්මක කිරීම) අවසර නැත, හෝ ගොනුව තවමත් නොපවතින අතර මාපිය බහලුම වෙත පිවිසීමට අවසර නැත.

එන්ටමෙටෝල්ග්

pathname ඉතා දිගු විය.

ඒකයි

O_CREAT ස්ථාපනය කර නොමැති අතර නම් කරන ලද ගොනුව නොමැත. නැතහොත් pathname හි ඇති සංරචක සංරචක නොපවතින හෝ සංකේතාත්මක සබැඳියක් වේ.

ENOTDIR

Pathname ලෙස භාවිතා කරන සංරචකය සත්ය වශයෙන්ම ඩිරෙක්ටරියක් නොවේ, නැතහොත් O_DIRECTORY යන්න නියම කර ඇති අතර pathname යනු බහලුමක් නොවේ.

ENXIO

O_NONBLOCK | O_WRONLY සකසනු ලැබේ, නම් කරන ලද ගොනුව FIFO සහ කියවීම සඳහා ගොනුව විවෘත කර නැත. නැතහොත්, ගොනුව උපාංග විශේෂ ගොනුවක් වන අතර අදාල උපාංගයක් නොමැත.

ENODEV

pathname යනු විශේෂිත ගොනුවක් වන අතර අදාල උපාංගයක් නොමැත. (මෙය ලිනක්ස් කර්නල දෝෂයකි - මෙම තත්වයේදී ENXIO නැවත ලබා ගත යුතුය.)

EROFS

pathname read-only ගොනු පද්ධතියක ගොනුවකට යොමු කරන අතර ප්රවේශය සඳහා ලිවීමේ ප්රවේශය ඉල්ලා ඇත.

ETXTBSY

පේමන් නාමය දැනට ක්රියාත්මක වෙමින් පවතින ක්රියාත්මක කළ හැකි අනුරුවක් වෙත යොමු කරන අතර ප්රවේශය ලිවීම ඉල්ලා ඇත.

EFAULT

පේළි නාමය ඔබේ ප්රවේශය ලබාගත හැකි ලිපින අවකාශයෙන් පිටත.

ELOOP

පේළි නාමයේ විසඳීමට බොහෝ සංකේතාත්මක ඈඳියන් හමු වූ අතර, හෝ O_NOFOLLOW නිශ්චිතව දක්වා තිබුණද, මාර්ගයෙහි සංකේතය සබැඳියක් විය.

එන්එස්එස්පී

pathname නිර්මාණය කළ නමුත් pathname සහිත උපාංගය නව ගොනුවක් සඳහා ඉඩක් නැත.

ENOMEM

ප්රමාණවත් kernel මතකය ලබා ගත හැක.

EMFILE

මෙම ක්රියාවලිය දැනටමත් ගොනු විවෘත කර ඇති උපරිම සංඛ්යාව.

ENFILE

පද්ධතියේ විවෘත කරන ලද මුළු සංඛ්යාව මත සීමාව ළඟා වී ඇත.

අනුකූල වේ

SVr4, SVID, POSIX, X / ODP , BSD 4.3 O_NOFOLLOW සහ O_DIRECTORY කොඩි ලිනක්ස් - විශේෂිත වේ. එක් අර්ථ දැක්වීම සඳහා _GNU_SOURCE macro යන්න අර්ථ දැක්විය හැකිය.

සීමා

NFS යටින් ඇති මූලධනයෙහි බොහෝ මූලද්රව්යයන් ඇත. වෙනත් O_SYNC සහ O_NDELAY අතරට බලපායි .

POSIX මඟින් සින්ක්ක්රීනය කල I / O වර්ග තුනක් සඳහා O_SYNC , O_DSYNC හා O_RSYNC ධජ වලට අනුරූප වන. වර්තමානයේ (2.1.130) මෙම සියල්ලම ලිනක්ස් යටතේ සමානයි.