Linux Command Ачуу Үйрөнүү

Кыскача баяндама

#include << адреси "билэ: /usr/include/sys/types.h"> нүштөрдүн / types.h> #include << А HREF = "билэ: /usr/include/sys/stat.h"> нүштөрдүн / stat.h> #include << адреси "билэ: /usr/include/fcntl.h"> fcntl.h> Int ачык (Const Исахар * атын, желектерди INT); Int ачык (Const Исахар * атын, ички желектер, mode_t режими); Int CREAT (Const Исахар * атын, mode_t режими);

баяндоо

Ачык () системасы чакыруу Linux буйрук сөп баалоо бир жол атын айландыруу үчүн колдонулат (кичинекей, кийинки I колдонуу үчүн эмес терс бүтүн / O окулган сыяктуу, ж.б. жаз). Чакыруу ийгиликтүү болсо, билэ сыпаттаманы төмөн билэ сыпаттаманы жараянына Учурда ачык эмес, мененбиз кайтып келди. Бул чакырык эмес, кандайдыр бир башка жол менен бөлүштү, жаңы бир ачык билэни жаратат. (Бирок, жалпы ачык делолору тармактан аркылуу пайда болушу мүмкүн (2) система чакыруу.) Жаңы билэ сыпаттаманы Шмидт милдеттерин боюнча ачык бойдон коюлса (fcntl карагыла (2)). ордун билэ билэ башына белгиленет.

Параметр желектери ачып талап O_RDONLY, O_WRONLY бир же O_RDWR сырткары окуу үчүн гана, жазып-гана же окуу / жазуу, тиешелүүлүгүнө жараша, bitwise- же "г нөлгө же төмөнкү көбүрөөк менен:

O_CREAT

билэ жок болсо да пайда болушу мүмкүн. Билэ ээси (колдонуучу ID) алуунун натыйжалуу колдонуучу ID менен белгиленет. топ менчик (топ ID) алуунун натыйжалуу тобу ID же топ ата-каталогуна (системасынан түрүнө жараша ID да жана ыкмаларды тоосуна коюп, ал эми ата-эне тизиминин режими, мисалы, кара жал тоодо айтылгандай параметрлери bsdgroups жана ext2 тутумун жана sysvgroups, (8)).

O_EXCL

O_CREAT менен бирге колдонулганда, билэ болсо, буга чейин эле бар, ал ката жана ачык жооп берет. карабастан, кайда, анын упай менен бул контекстте каймана шилтеме бар. O_EXCL талкаланып жатат NFS билэ системаларынын жарыш абалын камтыйт илгичтүү милдеттерди жүзөгө ашыруу үчүн, ага таянсак, программалары. Бир Lockfile колдонуп атомдук билэ кулпулоо аткаруу үчүн чечим ошол негиздемени боюнча уникалдуу билэни түзүү болуп саналат (мисалы, камтыган хост жана PID), пайдаланууга шилтемеси (2) Lockfile шилтеме кылып. Эгерде шилтеме () 0 кайтарып, кулпу ийгиликтүү болот. Болбосо, пайдаланууга статистика (2), анын шилтемеси саны 2 пайызга көбөйгөн болсо, текшерип уникалдуу делосуна боюнча, мында кулпу да ийгиликтүү болот.

O_NOCTTY

Атын айыккыс түзмөккө сөз болсо --- Телетайп (4) --- бул жараян бир эмес, ал тургай, эгерде кайра иштетүүгө контролдук терминал болот деген туура эмес көрүшөт.

O_TRUNC

билэ буга чейин дайыма билэни бар жана ачык режими жазып берет, анда ал билэ FIFO же терминалдык аппарат билэ болсо 0. узундугу жантык болот (б.а., O_RDWR же O_WRONLY болуп саналат), O_TRUNC желек эске алынбайт. Болбосо, O_TRUNC таасири белгисиз болуп саналат. (Көп Linux жөнүндө котормолордо ал эске алынбайт; башка, ал ката кайтып келет.)

O_APPEND

билэ толуктоого режиминде ачылды. Ар бир жаз алдында, билэ көрсөткүчү lseek менен болсо, иштин жыйынтыгы боюнча жайгашкан. O_APPEND бир эмес, бир нече иш боюнча бир жолу делосуна маалыматтарды appends болсо NFS билэ системалары боюнча бузулган даанасын алып келиши мүмкүн. Бул NFS бир делосуна толуктоо колдоого албайт, себеби, ошондуктан кардар ядро ​​жарыш абалда орундай албайт турган, аны тууроочу жазыла элек.

O_NONBLOCK же O_NDELAY

Мүмкүн, билэ эмес тосмолоо режиминде ачылды. Да, ачык да, чалуу жараян күтүп алып келем кайтарылып билэ баалоо боюнча кийинки аракеттер. FIFOs колдонуу (атындагы түтүктөр) үчүн, ошондой эле fifo (4) карагыла. Бул режим FIFOs башка документтерде эч кандай күчкө ээ эмес.

O_SYNC

билэ синхрондуу I / O ачылат. Натыйжасында билэ баалоо боюнча кандайдыр бир жазуу маалыматтары денелик негизги шаймандардын жазылган чейин чакырып жол тосууга барышаарын билдиришкен. Бирок, төмөндө чектөөлөр карагыла.

O_NOFOLLOW

Атын каймана шилтеме болсо, анда ачык болбой. Бул нускадагы Linux кошулган 2.1.126 бир FreeBSD узартуу болот. атын мурдагы компоненттери менен каймана мааниде шилтемелер дагы коштолот. из glibc 2.0.100, кийинчерээк баш бул желектин аныктама өзүнө камтыйт; колдонулган болсо, 2.1.126 алдында данектери бурбай калат.

O_DIRECTORY

Атын директория жок болсо, анда сөзсүз ачык себеп. Opendir Бул желек Linux-айкын, ал эми ядро нускасы 2.1.126, баш-жылдын кызмат көйгөйлөрдөн качууга-жылы кошулган (3) FIFO же кассета түзмөктө деп аталат, ал эми opendir ишке ашыруу тышкары колдонулбашы керек .

O_DIRECT

жана ошол жерден I / O кэш таасирин азайтууга аракет кылгыла. Жалпысынан алганда бул аткарууну баркын, бирок мындай арыздар өз кэштелет кылганда эле өзгөчө учурларда, пайдалуу. File I / O түз / колдонуучу космос паддарды чейин жасалат. I / O синхрондуу эмес, башкача айтканда, бүткөндөн кийин окуу (2) же (2) системасы чалуу жазып, маалымат өткөрүлүп берилди деп кепилдик беребиз. Өткөрүп берүү өлчөмү жана ордун колдонуучу аймак Билэ трассанын бардык билэ системасынын блок өлчөмүн көбөйтүү жолу менен болушу керек.
Бул желек Unix-сыяктуу системалардын бир катар колдоого алынат; колдоо ядро ​​нускадагы Linux ылайык кошулган 2.4.10.
Бөгөттөөлөр түзмөктөр үчүн семантикалык окшош Interface чийки (8) сүрөттөлөт.

O_ASYNC

Белги түзүү (демейки SIGIO, бирок бул fcntl аркылуу өзгөртүлүшү мүмкүн (2)) Бул баалоо боюнча киргизүү же чыгаруу мүмкүн болгондо. Бул өзгөчөлүк терминалдары, жасалма-терминалдардын жана таканычтарын үчүн гана жеткиликтүү. Мындан аркы маалымат үчүн fcntl (2) карагыла.

O_LARGEFILE

Ири Files системасын колдоо 32-бит системалары жөнүндө, анын өлчөмү 31 бит ачылат көрсөтүлүшү мүмкүн эмес болот Files берет.

Бул кошумча желектери айрымдары билэ ачылган кийин fcntl менен өзгөрүшү мүмкүн.

Аргумент режими уруксаттарын жаңы ачылган учурда колдонууга белгилейт. Бул адаттагыдай эле жол менен жараян umask менен өзгөртүлдү: жараткан берилген уруксаттар (режими & ~ 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_WRONLY | | O_TRUNC CREAT O_CREAT бирдей желектер менен ачуу барабар.

КАЙТЫП VALUE

ачуу жана жаңы билэ сүрөттөгүч кайра түзөбүз, же -1 ката (мындай учурда, катасы туура коюлса) болгон болсо. Ачык түзмөк атайын ача алат, бирок анын CREAT аларды түзүү мүмкүн эмес - mknod (2) анын ордуна колдонобуз.

UID карта менен NFS системи иштетилген жөнүндө, ачык билэ сүрөттөгүч кайрылып, бирок (2) суроо-EACCES менен баш окуп, мисалы, мүмкүн. Бул кардар уруксат, бирок UID картасын окуп, суроо-жаза боюнча тейлөө аркылуу жүзөгө ашырылат текшерүү аркылуу ачык аткарат, себеби болуп саналат.

билэ кайрадан түзүлгөн болсо, анын күнүнө, ctime, mtime талаалары азыркы убакытка белгиленет, ошондой эле ата-эне тизиминин ctime жана mtime талаалары бар. Болбосо, билэ анткени O_TRUNC желектин барак болсо, анын ctime жана mtime талаалары азыркы убакытка белгиленет.

Каталар

EEXIST

атын мурунтан эле бар жана O_CREAT жана O_EXCL колдонулган.

EISDIR

атын бир каталогуна жана мүмкүндүк тартылган жазууну суранган (башкача айтканда, O_WRONLY же O_RDWR белгиленет) билдирет.

EACCES

Делосуна Суралган кирүү мүмкүн эмес, же атын боюнча көрсөткүчтөрдүн бири издөө (ишке) уруксат жол берген эмес, же билэ али түзүлө жана ата-эне каталогун жазууга мүмкүндүк жок, жол берилбейт.

ENAMETOOLONG

атын өтө узун эле.

ENOENT

O_CREAT коюп, аталган билэ нерсе жок эмес. Же болбосо, атын бир каталог компоненти бар же асылып символдук шилтеме бербейт.

ENOTDIR

Чындыгында жол атын бир каталогуна катары колдонулган бир бөлүгү эмес, каталог, же O_DIRECTORY көрсөтүлгөн жана жол атын директория болгон эмес.

ENXIO

O_NONBLOCK | O_WRONLY деген билэ FIFO болуп саналат жана эч кандай технологиялык окуу ачык сааты бар. Же болбосо, билэ түзмөк атайын билэ болуп саналат жана эч кандай тиешелүү аппарат бар.

ENODEV

атын түзмөк атайын делосуна айтылат жана ага тиешелүү аппарат бар. (Бул Linux өзөк конуп - бул кырдаалда ENXIO кайра кайтарылууга тийиш.)

EROFS

атын окуу үчүн гана тутумуна бир делосуна сөз жана уруксат сураган эле жаз.

ETXTBSY

атын Азыркы аткарылган жана жазууга мүмкүндүк алуу суралган эле жаткан Аткаруучу бейнеси билдирет.

EFAULT

Сиздин жеткиликтүү дареги мейкиндиктен тышкары жол атын упай.

ELOOP

Өтө көп каймана шилтемелер чечүүгө жол атын да туш болгон, же O_NOFOLLOW көрсөтүлгөн, бирок атын каймана шилтеме болгон.

ENOSPC

атын түзүлгөн берилиши керек болчу, бирок атын камтыган түзмөк жаңы делосуна үчүн эч кандай орун жок.

ENOMEM

Жетишсиз ядро ​​эстутум бар.

EMFILE

жараян ачык делолорун саны чегине жетти.

ENFILE

системасынын ачык дептердин жалпы саны боюнча чектөө жетти.

кармануу үчүн

SVr4, SVID, POSIX, X / OPEN, BSD 4.3 O_NOFOLLOW жана O_DIRECTORY желектери бар Linux -specific. Бири, алардын аныктамалары алуу үчүн _GNU_SOURCE Макро аныктоо мүмкүн.

чектөөлөр

Башкалар O_SYNC жана O_NDELAY арасында таасирин тийгизген, NFS негизинде протоколго көп infelicities бар.

POSIX желектери O_SYNC, O_DSYNC жана O_RSYNC ылайык, синхрондуу I / O үч түрдүү генеалогиялык камсыз кылат. Азыркы учурда (2.1.130) Булардан башка Linux астында синоним болуп саналат.