Сазнајте Линук Цомманд Опен

Синопсис

#инцлуде << А ХРЕФ = "датотека: /уср/инцлуде/сис/типес.х"> сис / типес.х> #инцлуде << А ХРЕФ = "датотека: /уср/инцлуде/сис/стат.х"> сис / стат.х> #инцлуде << А ХРЕФ = "фајл: /уср/инцлуде/фцнтл.х"> фцнтл.х> инт опен (цонст цхар * патхнаме , инт флагс ); инт опен (цонст цхар * патхнаме , инт флагови , моде_т моде ); инт цреат (цонст цхар * патхнаме, моде_т моде );

Опис

Отворена () систем цалл линук наредба се користи за претварање путне датотеке у дескриптор датотеке (мали, не-негативни цијели број за кориштење у наредним И / О као што су читање , писање итд.). Када је позив успешан, дескриптор датотеке се враћа са најнижим дескриптором датотеке који тренутно није отворен за процес. Овај позив креира нову отворену датотеку, која се не дели са било којим другим процесом. (Али дељени отворени фајлови могу се појавити преко системског позива форк (2). Нови дескриптор датотеке ће остати отворен преко функција екец (погледајте фцнтл (2)). Смјена датотеке је подешена на почетак датотеке.

Заставице параметара су оне од О_РДОНЛИ , О_ВРОНЛИ или О_РДВР које захтевају отварање датотеке само за читање, само за писање или читање / писање, битно или д са нула или више од следећег:

О_ЦРЕАТ

Ако датотека не постоји, биће креиран. Власник (ИД корисника) датотеке је постављен на ефективан кориснички ИД процеса. Власништво групе (ИД групе) је постављено или на ефективну идентификациону групу процеса или на идентификациону групу матичног директоријума (зависно од типа датотечног система и опција монтирања и начина родитељског директоријума, погледајте нпр. Моунт опције бсдгроупс и сисвгроупс ект2 датотечног система, као што је описано у моунт (8)).

О_ЕКСЦЛ

Када се користи са О_ЦРЕАТ-ом , ако датотека већ постоји, грешка је и отворени неће успјети. У том контексту постоји симболичка веза, без обзира на то гдје се она указује. О_ЕКСЦЛ је прекинут на НФС датотечним системима , програми који се ослањају на њега за обављање задатака закључавања садрже услов трке. Решење за закључавање блокирања атомске датотеке помоћу лоцкфиле-а је да креира јединствену датотеку на истом фс-у (нпр. Укључивање хостнаме-а и пид-а), користите линк (2) да бисте направили везу са лоцкфиле-ом. Ако линк () враћа 0, закључавање је успјешно. У супротном, користите стат (2) на јединственој датотеци да проверите да ли је број повезивања повећан на 2, у ком случају је брава такође успешна.

О_НОЦТТИ

Ако се име стазе односи на терминалски уређај --- погледајте тти (4) --- неће постати контролни терминал процеса, чак и ако процес нема.

О_ТРУНЦ

Ако датотека већ постоји и представља редовну датотеку, а отворени режим дозвољава писање (тј. Је О_РДВР или О_ВРОНЛИ), онда ће бити скраћен на дужину 0. Ако је датотека датотека ФИФО или терминалног уређаја, ознака О_ТРУНЦ се игнорише. У супротном, ефекат О_ТРУНЦ-а није неодређен. (На многим верзијама Линука то ће бити занемарено, ау другим верзијама ће вратити грешку.)

О_АППЕНД

Датотека се отвара у додирном режиму. Пре сваког писања , показивач датотеке се налази на крају датотеке, као да је са лсеек-ом . О_АППЕНД може довести до оштећених датотека у НФС датотечним системима ако више од једног процеса додају податке у датотеку одједном. То је зато што НФС не подржава додавање датотеке, тако да клијентско језгро мора да га симулира, што се не може учинити без тркачког стања.

О_НОНБЛОЦК или О_НДЕЛАИ

Када је могуће, датотека се отвара у не-блокирајућем режиму. Ни отворени, ни било какве накнадне операције на датотеци датотеке који се враћа ће довести до чекања процеса позива. За руковање ФИФО-има (названим цијевима), погледајте и Фифо (4). Овај режим не мора имати ефекта на датотеке осим ФИФО.

О_СИНЦ

Датотека је отворена за синхроне И / О. Сваки запис с с обзиром на описни фајл ће блокирати процес позивања све док подаци нису физички написани на основни хардвер. Међутим, погледајте одељак РЕСТРИЦТИОНС.

О_НОФОЛЛОВ

Ако је путање симболичком везом, онда отворен не успе. Ово је додатак за ФрееБСД, који је додат у Линук у верзији 2.1.126. И даље ће се пратити симболичне везе у ранијим компонентама имена пута. Главе из глибц 2.0.100 и касније укључују дефиницију ове заставе; кернели пре 2.1.126 ће их игнорисати ако се користе .

О_ДИРЕЦТОРИ

Ако име путање није директоријум, отворите га да не успије. Ова заставица је специфична за Линук и додата је у верзију 2.1.126 кернела, како би се избегле проблеми са порицањем услуга, ако се опендир (3) позива на ФИФО или касетни уређај, али се не би требало користити изван имплементације опендира .

О_ДИРЕЦТ

Покушајте да смањите кеш ефекте И / О-а у ову датотеку. Уопштено, то ће деградирати перформансе, али је корисно у посебним ситуацијама, као што је када апликације врше сопствени кеширање. Филе И / О се врши директно у / из корисничких бафера. И / О је синхрони, тј. При завршетку системског позива читања (2) или врите (2), подаци су гарантовани да су пренесени. Величина преноса и поравнање корисничког бафера и оффсет фајла морају бити вишеструки од величине логичког блока датотечног система.
Ова застава је подржана на више Уник-лике система; подршка је додата под Линук у кернел верзији 2.4.10.
Семантички сличан интерфејс за блок уређаје описан је у сировом (8).

О_АСИНЦ

Генеришите сигнал (СИГИО по подразумеваној вредности, али то се може променити помоћу фцнтл (2)) када је улаз или излаз постао могућ за овај дескриптор датотеке. Ова функција је доступна само за терминале, псеудо-терминале и утичнице. Погледајте фцнтл (2) за више детаља.

О_ЛАРГЕФИЛЕ

На 32-битним системима који подржавају систем великих фајлова, дозволите фајлове чије величине не могу бити представљене у 31 бит.

Неке од ових опционих застава могу се изменити користећи фцнтл након што је датотека отворена.

Режим аргумента одређује дозволе за употребу у случају креирања нове датотеке. То је модификовано умаском процеса на уобичајени начин: дозволе креиране датотеке су (моде & ~ умаск) . Имајте на уму да се овај режим односи само на будуће приступе новоформираног фајла; отворени позив који ствара датотеку само за читање може добро вратити дескриптор датотеке за читање / писање.

Следеће симболичке константе су дате за режим :

С_ИРВКСУ

00700 корисник (власник датотеке) је прочитао, писао и извршио дозволу

С_ИРУСР (С_ИРЕАД)

Корисник 00400 има одобрење за читање

С_ИВУСР (С_ИВРИТЕ)

00200 корисник има дозволу за писање

С_ИКСУСР (С_ИЕКСЕЦ)

00100 корисник има дозволу за извршење

С_ИРВКСГ

Група 00070 је читала, писала и извршила дозволу

С_ИРГРП

00040 група има дозволу за читање

С_ИВГРП

Група 00020 има дозволу за писање

С_ИКСГРП

Група 00010 има дозволу за извршење

С_ИРВКСО

00007 други су прочитали, писали и извршили дозволу

С_ИРОТХ

00004 други имају дозволу за читање

С_ИВОТХ

Други имају дозволу за писање

С_ИКСОТХ

Други имају извршну дозволу

режим мора бити специфициран када је О_ЦРЕАТ у заставама , и на други начин се игнорише.

креат се еквивалентно отворити са заставама које су једнаке О_ЦРЕАТ | О_ВРОНЛИ | О_ТРУНЦ .

ПОВРАТНА ВРИЈЕДНОСТ

отворени и креатор враћа нови дескриптор датотеке или -1 ако се десила грешка (у том случају, еррно се поставља на одговарајући начин). Имајте на уму да отворени могу отворити специјалне датотеке уређаја, али креатор не може их креирати - уместо тога користите мкнод (2).

На НФС датотечним системима са омогућеним УИД мапирањем, отворена може вратити дескриптор датотеке, али нпр. Захтјеви за читање (2) су одбијени са ЕАЦЦЕС-ом . Ово је зато што клијент обавља отворен провјеравањем дозвола, али УИД мапирање врши сервер на захтјевима за читање и писање.

Ако је датотека новонастала, њене атиме, цтиме, мтиме поља су подешене на тренутно време, а такође су и цтиме и мтиме поља матичног директоријума. У супротном, ако се датотека измени због заставице О_ТРУНЦ, поља цтиме и мтиме су подешена на тренутно време.

Грешке

ЕЕКСИСТ

путање већ постоји и О_ЦРЕАТ и О_ЕКСЦЛ су коришћени.

ЕИСДИР

патхнаме се односи на директоријум и тражено приступно писање (тј. О_ВРОНЛИ или О_РДВР је постављено).

ЕАЦЦЕС

Тражени приступ датотеци није дозвољен, или један од директоријума у путању није дозволио тражење (извршавање) или датотека још није постојала и приступ писању родитељског именика није дозвољен.

ЕНАМЕТООЛОНГ

путања је била предугачка.

ЕНОЕНТ

О_ЦРЕАТ није подешен и именована датотека не постоји. Или, компонента директоријума у путањи не постоји или представља симболичну везу.

ЕНОТДИР

Компонента која се користи као директоријум у путањи није заправо директориј, или је О_ДИРЕЦТОРИ специфициран и патхнаме није директоријум.

ЕНКСИО

О_НОНБЛОЦК | О_ВРОНЛИ је подешен, именована датотека је ФИФО и ниједан процес није отворен за читање. Или, датотека је специјална датотека уређаја и нема одговарајућег уређаја.

ЕНОДЕВ

патхнаме се односи на посебну датотеку уређаја и не постоји одговарајући уређај. (Ово је грешка Линук кернела - у овој ситуацији ЕНКСИО мора бити враћена.)

ЕРОФС

патхнаме се односи на датотеку у датотеци само за читање и захтев за писање је захтеван.

ЕТКСТБСИ

патхнаме односи се на извршну слику која се тренутно извршава и захтева се уписивање.

ЕФАУЛТ

патхнаме тачке изван вашег приступачног адресног простора.

ЕЛООП

У рјешавању имена пута било је сувише симболичких веза, или је О_НОФОЛЛОВ прецизиран, али путање је симболична веза.

ЕНОСПЦ

путање је требало створити, али уређај који садржи путање нема простор за нову датотеку.

ЕНОМЕМ

Доступна је недовољна меморија кернела.

ЕМФИЛЕ

Процес већ има максималан број отворених датотека.

ЕНФИЛЕ

Достигнута је граница укупног броја датотека отворених на систему.

У складу са

СВр4, СВИД, ПОСИКС, Кс / ОПЕН, БСД 4.3 О_НОФОЛЛОВ и О_ДИРЕЦТОРИ заставе су Линук -специфичне. Можда ће морати да дефинише макро _ГНУ_СОУРЦЕ да би добили своје дефиниције.

Ограничења

У протоколу који се темељи на НФС-у има много неизвјесности, што утјече између осталог О_СИНЦ и О_НДЕЛАИ .

ПОСИКС пружа три различите варијанте синхронизованог И / О, који одговарају ознакама О_СИНЦ , О_ДСИНЦ и О_РСИНЦ . Тренутно су (2.1.130) сви они синонимни под Линуком.