Кушодани фармонҳои Linux

Калима

#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 fcntl.h> кушодан (const char * рамзи параграф , байрақчаҳо ); int кушода шудааст (const char * рамзи параметрӣ , ишораҳо дар ҳолати , mod_t mode ); int create (const char * charname , mode_t mode );

Тавсифи

Фармони кушодро (open) ( linux) истифода баред, барои фиристодани рамзи pathname ба файли тасвиркунанда истифода кунед (як ададҳои хурд, ғайри манфӣ барои истифода дар I / O баъд аз хондан , навиштан ва ғайра). Вақте ки занг ба муваффақият табдил меёбад, тасвири файли баргардонида мешавад, ки намоишгари суроғаи поёнтар, ки ҳоло дар раванди кушода нест. Ин занги нав кушода мешавад, ки бо дигар равандҳо мубодила намекунад. (Аммо файлҳои кушодани муштарак метавонанд тавассути зангҳои система (2) занг зананд.) Нишондиҳандаи файлии нав дар функсияҳои exec кушода мешавад (нигаред ба fcntl (2)). Васл кардани файл ба оғози парванда муқаррар карда мешавад.

Парчамҳои параметрӣ яке аз O_RDONLY , O_WRONLY ё O_RDWR мебошад, ки хоҳиши кушодани файли танҳо, танҳо навиштан ё хондан / навиштанро бо нархбандӣ - ё бо сифр ё бештар аз инҳо кушоданро талаб мекунад:

O_CREAT

Агар парванда вуҷуд надорад, он бунёд карда мешавад. Соҳиби (корбари корбар) -и файл ба ID-и кории самараноки раванди муқаррар карда мешавад. Моликии гурӯҳ (ID-и гурӯҳ) ба ID-ии самараноки гурӯҳӣ ё ба ID-и гурӯҳии феҳристи воҳима вобаста аст (вобаста ба намуди файлҳои файлӣ ва насбкунӣ ва намуди феҳристи волидайн, дидан, масалан вариантҳои bsdgroups ва sysvgroups аз файлҳои ext2, ки дар кӯҳ ифода шудааст (8)).

O_EXCL

Ҳангоми бо O_CREAT истифодашуда, агар парванда аллакай мавҷуд бошад, хато аст ва кушода мешавад. Дар ин робита, алоқаи симметрӣ вуҷуд дорад, сарфи назар аз он, ки нуқтаи он. O_EXCL системаи файлҳои NFS-ро вайрон мекунад, барномаҳое, ки ба он боварӣ доранд, барои иҷрои вазифаҳои баста дар ҳолати душворӣ қарор доранд. Барои ҳалли функсияҳои аттестатсионӣ дар якҷоягӣ истифода бурдани кнопкаи электромагнитӣ дар як фишурдани файли ягона (масалан, муттаҳид кардани номи фирмавӣ ва pid), пайвастшавиро (2) барои пайвастшавӣ ба lockfile истифода баред. Агар () бозгаштан 0 бошад, қуфл муваффақ аст. Дар акси ҳол, санаи ягонаи (2) оид ба файли нодир санҷед, ки оё шумораи пайвастшавӣ ба 2 ба вуқӯъ пайваст, ки дар он ҳолат қулф низ муваффақ аст.

O_NOCTTY

Агар номгӯи асбобҳои терминалӣ ба назар гирад, 4-ро мебинед, ки он терминали назорати раванди худро ба кор намебарад, ҳатто агар ин раванд набошад.

O_TRUNC

Агар парванда аллакай вуҷуд дошта бошад, ва ҳолати кушода имкон медиҳад, ки нависед (яъне, O_RDWR ё O_WRONLY аст) ба дарозии 0 дода мешавад. Агар файл файли феҳристи FIFO ё терминал бошад, O_TRUNC тақсим карда мешавад. Дар акси ҳол, таъсири O_TRUNC маълум нест. (Дар бисёр тарҷумаҳои Linux инъикос карда мешавад; дар дигар вернҳо он хато бармегардад.)

O_APPEND

Файл дар замимаи замима кушода мешавад. Пеш аз ҳар як навиштан , нишоннамои файл дар охири файл, ба монанди lseek . O_APPEND метавонад ба файлҳои коррупсионӣ дар системаи файлии NFS оварда расонад, агар зиёда аз як раванд маълумотро ба як бор замима кунад. Ин аз он сабаб аст, ки NFS замима кардани файлро дастгирӣ намекунад, бинобар ин, кефелҳои мизоҷ бояд мутобиқ ба он, ки бе роҳи мусобиқа анҷом дода нашавад.

O_NONBLOCK ё O_NDELAY

Ҳангоми имконпазир, парванда дар намуди ғайриқонунӣ кушода мешавад. На кушод ва на амалиётҳои минбаъда дар таркиби файл, ки баргардонида мешаванд, раванди даъватро барои интизор шудан мефиристад. Барои гузарондани FIFOs (қубурҳои номбурда), инчунин ба панҷум нигаред (4). Ин хосият бояд дар файлҳои ғайр аз FIFOs ягон таъсир намерасонад.

O_SYNC

Файл барои синхронизатсияи I / O кушода шудааст. Ҳар як навиштаи дар тарҳи файли натиҷавардида то он вақте, ки маълумот ба физикаи аслӣ навишта шудааст, раванди зангро қатъ мекунад. Гарчанде,

O_NOFOLLOW

Агар адреси рамзи символӣ бошад, пас он кушода намешавад. Ин васеъкунии FreeBSD аст, ки ба Linux дар версияи 2.1.126 илова шудааст. Пайвастҳои символӣ дар ҷузъҳои қаблии номи рамзӣ ҳанӯз идома доранд. Сарлавҳаҳои аз glibc 2.0.100 ва баъдтар таърифи ин флаг; Кишвари пеш аз 2.1.126, агар онро истифода набаранд .

O_DIRECTORY

Агар адреси решаи феҳрист набошад, кушодани варақа сабаб мегардад. Ин парчами Linux мебошад ва дар нусхаи нусхаи 2.1.126, барои пешгирӣ кардани мушкилоти хидматрасонӣ рад карда шудааст, агар opendir (3) дар дастгоҳи FIFO ё дастгоҳи бесим даъват карда шавад, аммо набояд берун аз татбиқи оптикӣ истифода шавад .

O_DIRECT

Кӯшиш кунед, ки ба ман таъсир расонад, ки таъсири манфии I / O ба ин ва аз ин файлҳо. Умуман, ин кори пастравӣ хоҳад кард, аммо дар ҳолатҳои махсус истифода мешавад, масалан, вақте ки барномаҳои коркарди пӯсти худро доранд. Файли I / O бевосита ба / фосилаи фосилаи корбар. I / O синхронизатсия аст, яъне, дар охири хондан (2) ё навиштани (2) занги система, маълумот ба интиқол дода мешавад. Андозаи интиқол ва ҳамоҳангсозии истифодабаранда ва вергулоти файл бояд ҳамаашон аз андозаи мантиқии системаи файл иборат бошад.
Ин байрақ дар якчанд системаҳои Unix-like дастгирӣ карда мешавад; пуштибонии Linux дар нусхаи силсилаи 2.4.10 илова шуд.
A интерфейси беназири монанд барои дастгоҳҳои блок дар хом (8) шарҳ дода шудааст.

O_ASYNC

Эҷод кардани сигнал (SIGIO бо нобаёнӣ, аммо ин метавонад тавассути fcntl (2)) иваз карда шавад, вақте ки вуруд ва хуруҷ дар ин файли file имконпазир мегардад. Ин хусусият танҳо барои терминалҳо, псевдо-терминалҳо ва плазмаҳо дастрас аст. Барои тафсилоти бештар ба fcntl (2) нигаред.

O_LARGEFILE

Дар системаҳои 32-бите, ки системаи файлии калонро пуштибонӣ мекунанд, имкон медиҳад, ки файлҳои дар он будаи 31 дараҷа кушода тавонанд.

Баъзе аз ин байрақҳои изофӣ метавонанд баъд аз парванда кушода шаванд, бо истифода аз флип ислоҳ шаванд .

Ҳолати баҳс иҷозат медиҳад, ки ҳангоми парвандаи нав сохта шавад. Он бо усули раванди оддии тағирёфта тағйир дода шудааст: иҷозатномаҳои файли офаридашуда (моддӣ ва ғайра) . Аҳамият диҳед, ки ин амал танҳо ба дастрасии оянда дар файли навтарини офаридашуда дахл дорад; занги кушоде , ки файлро танҳо хондааст, инчунин метавонад тасвироти хонагии / навишташударо баргардонад.

Сабтҳои зерин нишон дода мешаванд:

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 дигарон розигӣ доданд

С_ИВОТХ

00002 дигарон розигии нав доранд

S_IXOTH

00001 дигарон иҷозат доранд

вақте ки O_CREAT дар байрақҳо бошад ва бояд ба таври дигар рад карда шавад.

Creative барои кушода бо парчамҳо ба O_CREAT | O_WRONLY | O_TRUNC баробар аст .

МУҚАДДИМА

кушодан ва эҷод кардани тасвири файли нав, ё агар дар ҳолати хато рӯй диҳад (дар ҳолате, ки хато дуруст муайян карда мешавад). Дар хотир доред, ки open метавонад файлҳои махсусро кушояд, аммо онҳо наметавонанд онҳоро эҷод кунанд - истифода барандаро mknod (2) истифода баред.

Дар бораи системаи файлии NFS бо хати доимии UID фаъол, кушодан метавонад тавсифи файлро барорад, масалан, хондан (2) талабот бо EACCES рад карда шудааст. Ин сабабест, ки мизоҷ бо тафтиши иҷозатҳо кушода мешавад, аммо хати UID аз тарафи сервер бо дархости хондан ва навиштан иҷро карда мешавад.

Агар парванда офарида шуда бошад, атрофи он, замимаҳо, майдонҳои фосилавӣ ба замони кунунӣ муқаррар карда мешаванд ва инчунин соатҳои вақт ва феҳристи феҳристи волидайн мебошанд. Дар акси ҳол, агар файл аз сабаби параметрҳои O_TRUNC тағйир дода шуда бошад, вақти соат ва соатҳои он соати ҷорӣ муқаррар карда мешавад.

Хатогӣ

EEXIST

номгӯи роҳҳо аллакай мавҷуданд ва O_CREAT ва O_EXCL истифода шудаанд.

EISDIR

Номи роҳнамо ба феҳрист ва иртиботе , ки талаб карда мешавад, навишта шудааст (яъне, O_WRONLY ё O_RDWR муқаррар шудааст).

ҲАМКОРӢ

Дастрасии дархостшуда ба парванда иҷозат дода намешавад, ё яке аз феҳристҳо дар раками роҳ ба иҷозати ҷустуҷӯ (иҷрои) иҷозат дода нашуд, ё парванда ҳанӯз мавҷуд нест ва дастрасӣ ба феҳристи воҳиди нависта иҷозат дода намешавад.

ENAMETOOLONG

номаш дароз буд.

ТАЙЁР

O_CREAT насб карда намешавад ва файли номаълум вуҷуд надорад. Ё ин, ҷузъҳои феҳрист бо номи адрес вуҷуд надорад ё робитаи рамзии ҷудогона аст.

ENOTDIR

A component, ки ҳамчун феҳрист дар pathname истифода шудааст, дар ҳақиқат як феҳрист ё O_DIRECTORY муайян карда шудааст ва рамзи path directory нест.

ENXIO

O_NONBLOCK | O_WRONLY муқаррар карда шудааст, файли номаш ФИНО ва ҳеҷ гуна раванде барои хондан кушода нашудааст. Ё ин, файл файли махсуси дастгоҳ аст ва ягон дастгоҳи мувофиқ мавҷуд нест.

ENODEV

Номи роҳ ба файлҳои махсуси дастгоҳ дахл дорад ва ягон дастгоҳи мувофиқ мавҷуд нест. (Ин хатоги Linux-ин дар ин ҳолат ENXIO бояд баргардонида шавад.)

ЭРОСРС

номи рамз ба файли файлҳои файли ягона ишора мекунад ва дастрасии навиштан дархост карда шуд.

ETXTBSY

Номи роҳ ба нишондоди иҷрошаванда, ки айни замон иҷро карда мешавад ва навиштан дастрас аст.

EFAULT

нуқтаҳои роҳии берун аз фазои суроғаи дастрасии шумо.

ELOOP

Дар бисёре аз саёҳатҳои рамзии рамзии ҳалли рамзии рамзҳо мушоҳида мешуданд, ё O_NOFOLLOW муайян карда шуд, аммо рамзи он аломати рамзӣ буд.

ENOSPC

номи фирмавӣ бояд сохта шавад, аммо дастгоҳи дорои адреси роҳӣ барои файли нав ҷой нест.

ENOMEM

Ҳуҷҷати нопурраи кофӣ мавҷуд буд.

EMFILE

Раванди мазкур аллакай шумораи зиёди файлҳоро кушодааст.

ENFILE

Маҳдудияти шумораи умумии файлҳое, ки дар система кушода шудаанд, расиданд.

Мутобиқ ба

SVR4, SVID, POSIX, X / OPEN, BSD 4.3 O_NOFOLLOW ва Flags O_DIRECTORY Linux -specific мебошанд. Яке мумкин аст, ки миқдори _GNU_SOURCE миқдори муайянро муайян кунад.

Маҳдудиятҳо

Дар протокол дар протокол асосан NFS мавҷуданд, ки дар байни дигарон O_SYNC ва O_NDELAY таъсир мерасонанд.

POSIX се варианти гуногуни синтаксиси I / O, ки ба парчами O_SYNC , O_DSYNC ва O_RSYNC мувофиқ аст . Дар айни замон (2.1.130) ҳамаи инҳо дар зери лотин мебошанд.