А.В. Столяров - Введение в операционные системы (1114673), страница 16
Текст из файла (страница 16)
Äëÿ ïðîôåññèîíàëüíûõ ïðîãðàììèñòîâ òàêàÿ ëåêñèêàíåïðèåìëåìà õîòÿ áû ïî òîé ïðè÷èíå, ÷òî äëÿ ñìåíû èñïîëüçóåìîãî (è óñòîÿâøåãîñÿ) òåðìèíà íóæíû,ïî-âèäèìîìó, áîëåå âåñêèå ïðè÷èíû, íåæåëè ìíåíèå äàëåêèõ îò ïðîãðàììèðîâàíèÿ ñîòðóäíèêîâ îòäåëüíîâçÿòîé êîììåð÷åñêîé êîìïàíèè.71êàòàëîãè (âòîðîãî óðîâíÿ ), è ò.ä.Ïðè èñïîëüçîâàíèè êàòàëîãîâ ìîæíî ãîâîðèòü îòäåëüíî î êðàòêîì èëèëîêàëüíîì èìåíè ôàéëà (òî èìÿ, êîòîðîå ôàéë èìååò â ñâîåì êàòàëîãå) è îïîëíîì èìåíè ôàéëà èëè ïîëíîì ïóòè ê ôàéëó (ñòðîêà ñèìâîëîâ, âêëþ÷àþùàÿ ïîñëåäîâàòåëüíî èìåíà êàòàëîãîâ ïåðâîãî, âòîðîãî è ò.ä.
óðîâíåé, à çàòåìèìÿ ñàìîãî ôàéëà â ïîñëåäíåì èç êàòàëîãîâ). Èìåíà êàòàëîãîâ è ôàéëà îáû÷íî ðàçäåëÿþòñÿ ñïåöèàëüíûì ñèìâîëîì; â ñèñòåìàõ MS-DOS è Windows ýòîîáðàòíàÿ êîñàÿ ÷åðòà (\), â ñèñòåìå Unix − ïðÿìàÿ êîñàÿ ÷åðòà (/). Òàê,åñëè ìû ñîçäàäèì êàòàëîã ïåðâîãî óðîâíÿ work, â íåì ñîçäàäèì êàòàëîã âòîðîãî óðîâíÿ project, â êîòîðîì ðàçìåñòèì ôàéë program.c, òî ïîëíûé ïóòüê ýòîìó ôàéëó â ÎÑ Unix áóäåò âûãëÿäåòü òàê: /work/project/program.c.Îáû÷íî â êàæäîì êàòàëîãå ñóùåñòâóåò ôàéë ñî ñïåöèàëüíûì èìåíåì, îáîçíà÷àþùèé êàòàëîã áîëåå âûñîêîãî óðîâíÿ, ñîäåðæàùèé äàííûé êàòàëîã (òàêíàçûâàåìûé ðîäèòåëüñêèé êàòàëîã ).  ÎÑ Unix, à ïîçäíåå è â MS-DOS èWindows, â êà÷åñòâå òàêîãî ñïåöèàëüíîãî èìåíè èñïîëüçóåòñÿ ..
(äâå òî÷êè).Ïðè ðàáîòå ñ ôàéëàìè îáû÷íî íåêîòîðûé êàòàëîã íà äèñêå òåì èëè èíûìñïîñîáîì îáúÿâëÿåòñÿ òåêóùèì. Ê ôàéëàì, íàõîäÿùèìñÿ â òåêóùåì êàòàëîãå, ìîæíî îáðàùàòüñÿ áåç óêàçàíèÿ ïóòè, èñïîëüçóÿ òîëüêî êðàòêîå èìÿ.Äëÿ îáðàùåíèÿ ê ôàéëàì, íàõîäÿùèìñÿ âíå òåêóùåãî êàòàëîãà, ìîæíîèñïîëüçîâàòü êàê ïîëíûé ïóòü, òàê è îòíîñèòåëüíûé ïóòü, ñîñòîÿùèé èçèìåí êàòàëîãîâ, ïåðâûé èç êîòîðûõ íàõîäèòñÿ â òåêóùåì, âòîðîé − â ïåðâîì,è ò.ä. Ïðè íåîáõîäèìîñòè ìîæíî èñïîëüçîâàòü ñïåöèàëüíîå èìÿ, ññûëàþùååñÿíà ðîäèòåëüñêèé êàòàëîã.Ïóñòü,êïðèìåðó,âôàéëîâîéñèñòåìååñòüôàéëû/home/work/projects/task/prog.c è /home/fun/books/alice.txt.
Ïóñòüòåïåðü êàòàëîã /home/work/projects îáúÿâëåí òåêóùèì. Îòíîñèòåëüíûìèïóòÿìè íàøèõ ôàéëîâ áóäóò â ýòîì ñëó÷àå, ñîîòâåòñòâåííî, task/prog.c è../../fun/books/alice.txt.Îïåðàöèîííûå ñèñòåìû îòëè÷àþò ïîëíûå ïóòè îò îòíîñèòåëüíûõ íàëè÷èþ ñèìâîëà-ðàçäåëèòåëÿ ïåðåä ïåðâûì èìåíåì â ïóòè. Åñëè ýòîò ñèìâîë(ïðÿìàÿ èëè îáðàòíàÿ êîñàÿ ÷åðòà, â çàâèñèìîñòè îò ÎÑ) â íà÷àëå ïóòè ïðèñóòñòâóåò, òî ìû èìååì äåëî ñ ïîëíûì ïóòåì, åñëè íåò − òî ñ îòíîñèòåëüíûì.12.212.2.1Ôàéëîâàÿ ñèñòåìà ÎÑ UnixÌîíòèðîâàíèå îòëè÷èå îò ìíîãèõ äðóãèõ îïåðàöèîííûõ ñèñòåì, â ÎÑ Unix ôàéëîâàÿñèñòåìà ïðåäñòàâëÿåò ñîáîé åäèíîå äåðåâî êàòàëîãîâ.  èìÿ ôàéëà íè â êàêîì72âèäå íå âõîäèò èìÿ óñòðîéñòâà, íà êîòîðîì ýòîò ôàéë íàõîäèòñÿ (òî åñòüíè÷åãî àíàëîãè÷íîãî ïðèâû÷íûì äëÿ ïîëüçîâàòåëåé Windows îáîçíà÷åíèÿìA:, C: è ò.ï.
â ÎÑ Unix íåò). ñëó÷àå, åñëè â ñèñòåìå èìååòñÿ íåñêîëüêî äèñêîâ, îäèí èç íèõ îáúÿâëÿåòñÿ êîðíåâûì, à îñòàëüíûå ìîíòèðóþòñÿ â òîò èëè èíîé êàòàëîã, íàçûâàåìûéòî÷êîé ìîíòèðîâàíèÿ (àíãë. mount point ), ïðè ýòîì äëÿ óêàçàíèÿ ïîëíûõïóòåé ê ôàéëàì íà ýòîì äèñêå íåîáõîäèìî ê ïîëíîìó èìåíè ôàéëà â ðàìêàõäèñêà äîáàâèòü ñïåðåäè ïîëíûé ïóòü òî÷êè ìîíòèðîâàíèÿ. Ê ïðèìåðó, åñëèó íàñ åñòü äèñêåòà, íà íåé ñîçäàí êàòàëîã work, â íåì − ôàéë prog.c, à ñàìà äèñêåòà ñìîíòèðîâàíà ïîä êàòàëîã /mnt/floppy, ïîëíûé ïóòü ê íàøåìóôàéëó áóäåò âûãëÿäåòü òàê: /mnt/floppy/work/prog.c.12.2.2Èìåíà ôàéëîâ è èíäåêñíûå äåñêðèïòîðû ÎÑ Unix êàòàëîãè õðàíÿò òîëüêî èìÿ ôàéëà è íåêîòîðûé íîìåð, ïîçâîëÿþùèé èäåíòèôèöèðîâàòü ñîîòâåòñòâóþùèé ôàéë.
Âñÿ ïðî÷àÿ èíôîðìàöèÿî ôàéëå, âêëþ÷àÿ åãî ðàçìåð, ðàñïîëîæåíèå íà äèñêå, äàòû ñîçäàíèÿ, ìîäèôèêàöèè è ïîñëåäíåãî îáðàùåíèÿ, äàííûå î âëàäåëüöå ôàéëà è î ïðàâàõäîñòóïà ê íåìó ñâÿçûâàþòñÿ íå ñ èìåíåì ôàéëà (êàê ýòî äåëàåòñÿ âî ìíîãèõäðóãèõ îïåðàöèîííûõ ñèñòåìàõ), à ñ âûøåóïîìÿíóòûì íîìåðîì.Õðàíèìàÿ íà âíåøíåì çàïîìèíàþùåì óñòðîéñòâå (äèñêå) ñòðóêòóðà äàííûõ, ñîäåðæàùàÿ âñþ èíôîðìàöèþ î ôàéëå, èñêëþ÷àÿåãî èìÿ, íàçûâàåòñÿ èíäåêñíûì äåñêðèïòîðîì (àíãë. index node, èëèi-node). Èíäåêñíûå äåñêðèïòîðû èìåþò íîìåðà, óíèêàëüíûå â ðàìêàõ ôàé-ëîâîé ñèñòåìû äàííîãî äèñêà.
Èìåííî íîìåð ôàéëîâîãî äåñêðèïòîðà è õðàíèòñÿ â êàòàëîãå âìåñòå ñ èìåíåì ôàéëà.Îòìåòèì, ÷òî èìÿ ôàéëà â ÎÑ Unix ìîæåò áûòü äîñòàòî÷íî äëèííûì(îáû÷íî îãðàíè÷åíèå ñîñòàâëÿåò 255 ñèìâîëîâ) è ñîäåðæàòü, âîîáùå ãîâîðÿ,ëþáûå ñèìâîëû êðîìå íóëåâîãî è ñèìâîëà-ðàçäåëèòåëÿ. Òàê, èìÿ ôàéëà èçïÿòíàäöàòè òî÷åê ÿâëÿåòñÿ ñ òî÷êè çðåíèÿ Unix âïîëíå äîïóñòèìûì. Òåì íåìåíåå, íàñòîÿòåëüíî íå ðåêîìåíäóåòñÿ èñïîëüçîâàíèå â èìåíàõ ôàéëîâ òàêèõñèìâîëîâ, êàê ïðîáåë, çâåçäî÷êà, âîñêëèöàòåëüíûé è âîïðîñèòåëüíûé çíàêè,õîòÿ ýòî è âîçìîæíî.
Òàêæå ðåêîìåíäóåòñÿ âîçäåðæàòüñÿ îò èñïîëüçîâàíèÿ âèìåíàõ ôàéëîâ ñïåöñèìâîëîâ (òàêèå êàê ïåðåâîä ñòðîêè, òàáóëÿöèÿ, çâîíîê,backspace è ïð.) è ñèìâîëîâ ñ êîäîì, ïðåâûøàþùèì 127 (òàêèõ, êàê ðóññêèåáóêâû). Íàêîíåö, èìÿ ôàéëà êðàéíå íå ðåêîìåíäóåòñÿ íà÷èíàòü ñ ñèìâîëà- (ìèíóñ). Íåñîáëþäåíèå ýòèõ ðåêîìåíäàöèé ïðèâîäèò ê âîçíèêíîâåíèþïðîáëåì â ðàáîòå. Ïðîáëåìû òàêîãî ðîäà âñåãäà ìîãóò áûòü ïðåîäîëåíû, îäíàêî ïðåîäîëèìîñòü òðóäíîñòåé íå ÿâëÿåòñÿ ïîâîäîì äëÿ èõ ñîçäàíèÿ.7312.2.3Æåñòêèå ññûëêè ÎÑ Unix äîïóñêàåòñÿ, ÷òîáû äâà èëè áîëåå èìåí ôàéëîâ, ðàñïîëîæåííûõêàê â ðàçíûõ êàòàëîãàõ, òàê è â îäíîì, ññûëàëèñü íà îäèí è òîò æå íîìåðèíäåêñíîãî äåñêðèïòîðà.ßñíî, ÷òî ñîçäàåòñÿ ôàéë ïîä îäíèì îïðåäåëåííûì èìåíåì. Äîïîëíèòåëüíûå èìåíà ôàéë ìîæåò ïîëó÷èòü ïîçæå ñ ïîìîùüþ ñèñòåìíîãî âûçîâàint link(const char *oldpath, const char *newpath);ãäå oldpath − ñóùåñòâóþùåå èìÿ ôàéëà, newpath − íîâîå èìÿ.
Òàêèå èìåíà íàçûâàþòñÿ æåñòêèìè ññûëêàìè (àíãë. hardlinks ). Îòëè÷èòü æåñòêóþññûëêó îò îðèãèíàëüíîãî èìåíè ôàéëà íåâîçìîæíî: ýòè èìåíà ñîâåðøåííîðàâíîïðàâíû.ßñíî, ÷òî æåñòêàÿ ññûëêà ìîæåò áûòü óñòàíîâëåíà òîëüêî â ðàìêàõ îäíîãî äèñêà; äåéñòâèòåëüíî, íóìåðàöèÿ èíäåêñíûõ äåñêðèïòîðîâ ó êàæäîãîäèñêà ñâîÿ, òàê ÷òî ñîñëàòüñÿ íà èíäåêñíûé äåñêðèïòîð äðóãîãî äèñêà íåïðåäñòàâëÿåòñÿ âîçìîæíûì. èíäåêñíîì äåñêðèïòîðå ñîäåðæèòñÿ, êðîìå âñåãî ïðî÷åãî, ñ÷åò÷èê êîëè÷åñòâà ññûëîê íà äàííûé äåñêðèïòîð. Ïðè ñîçäàíèè ôàéëà ýòîò ñ÷åò÷èêóñòàíàâëèâàåòñÿ â åäèíèöó, ïðè ñîçäàíèè íîâîé æåñòêîé ññûëêè − óâåëè÷èâàåòñÿ íà åäèíèöó.Ôóíêöèÿ, ïðåäíàçíà÷åííàÿ äëÿ óäàëåíèÿ ôàéëà, íàçûâàåòñÿ unlink(),÷òî èíîãäà âûçûâàåò óäèâëåíèå ó ïðîãðàììèñòîâ, ïëîõî çíàêîìûõ ñ ÎÑ Unix. ÎÑ Unix ýòà ôóíêöèÿ ÿâëÿåòñÿ ñèñòåìíûì âûçîâîì, óäàëÿþùèì ññûëêóíà ôàéë, ÷òî è îáúÿñíÿåò ïðè÷èíû òàêîãî íàçâàíèÿ.
Ïðè âûïîëíåíèè âûçîâàunlink() èìÿ óäàëÿåòñÿ èç êàòàëîãà, à ñ÷åò÷èê ññûëîê â ñîîòâåòñòâóþùåìèíäåêñíîì äåñêðèïòîðå óìåíüøàåòñÿ. Ñàì ôàéë óäàëÿåòñÿ òîëüêî â ñëó÷àå,åñëè óäàëåííàÿ ññûëêà áûëà ïîñëåäíåé (ñ÷åò÷èê îáðàòèëñÿ â íóëü), è ïðèýòîì ôàéë íå áûë íè îäíèì èç ïðîöåññîâ îòêðûò íà çàïèñü èëè ÷òåíèå. Åñëèñ÷åò÷èê îáðàòèëñÿ â íóëü, íî ôàéë êåì-òî îòêðûò, óäàëåí îí áóäåò òîëüêîïîñëå çàêðûòèÿ.×òîáû ñîçäàòü æåñòêóþ ññûëêó ñðåäñòâàìè êîìàíäíîé ñòðîêè, ìîæíî âîñïîëüçîâàòüñÿ êîìàíäîé ln.
Îíà ïîõîæà íà êîìàíäó cp, íî îñóùåñòâëÿåò íåêîïèðîâàíèå ôàéëà, à ñîçäàíèå äëÿ íåãî íîâîãî èìåíè.Ñîçäàíèå æåñòêèõ ññûëîê íà êàòàëîãè ñèñòåìà çàïðåùàåò. Äåëîâ òîì, ÷òî ñîçäàíèå æåñòêèõ ññûëîê íà êàòàëîãè ìîæåò ïðèâåñòè ê âîçíèêíîâåíèþ îðèåíòèðîâàííûõ öèêëîâ â äåðåâå êàòàëîãîâ: íàïðèìåð, ê òàêîìóöèêëó ïðèâåëî áû âûïîëíåíèå êîìàíä$ mkdir a; cd a; mkdir b; cd b; ln ../../a ./c74 ýòîé ñèòóàöèè ïîïûòêà ðåêóðñèâíî ïðîéòè êàòàëîã a, íàïðèìåð, ñ öåëüþïîäñ÷åòà êîëè÷åñòâà ôàéëîâ â íåì çàêîí÷èëàñü áû çàöèêëèâàíèåì.
Êðîìåòîãî, îêàçàëîñü áû, ÷òî êàòàëîã a íåâîçìîæíî óäàëèòü, âåäü îí âñåãäà ÷òî-òîñîäåðæèò (êîñâåííî îí ñîäåðæèò ñàì ñåáÿ).Ïî ýòîé ïðè÷èíå æåñòêèå ññûëêè íà êàòàëîãè çàïðåùåíû íà óðîâíå ÿäðàîïåðàöèîííîé ñèñòåìû, ïðè÷åì íèêàêèå ïðàâà äîñòóïà íå ïîçâîëÿþò ýòîòçàïðåò îáîéòè.12.2.4Òèïû ôàéëîâ. Ñèìâîëè÷åñêèå ññûëêèÊàòàëîãè â ôàéëîâîé ñèñòåìå ÎÑ Unix ÿâëÿþòñÿ íå áîëåå ÷åì ôàéëàìèñïåöèàëüíîãî òèïà.
Âîîáùå ãîâîðÿ, èíôîðìàöèþ, ñîäåðæàùóþñÿ â êàòàëîãå(èìåíà è íîìåðà èíäåêñíûõ äåñêðèïòîðîâ), íåîáõîäèìî ãäå-òî õðàíèòü. Ïîýòîìó âñå, ÷åì íà íèçêîì óðîâíå îòëè÷àåòñÿ êàòàëîã îò îáû÷íîãî ôàéëà − ýòîçíà÷åíèå ïðèçíàêà òèïà â èíäåêñíîì äåñêðèïòîðå.  îñòàëüíîì õðàíåíèå íàäèñêå êàòàëîãà îðãàíèçîâàíî òî÷íî òàê æå, êàê è õðàíåíèå îáû÷íîãî ôàéëà.Êðîìå îáû÷íûõ ôàéëîâ è êàòàëîãîâ, îïåðàöèîííûå ñèñòåìû îáû÷íî ïîääåðæèâàþò è äðóãèå ñïåöèàëüíûå òèïû ôàéëîâ.
Òàê, â ôàéëîâûõ ñèñòåìàõñåìåéñòâà FAT (MSDOS, Windows è íåêîòîðûå äðóãèå ÎÑ) ïðèìåðîì òàêîãîñïåöèàëüíîãî òèïà ôàéëà ìîæåò áûòü ìåòêà òîìà (volume label). ÎÑ Unix ïîääåðæèâàåòñÿ ñðàâíèòåëüíî áîëüøîå êîëè÷åñòâî ðàçíîâèäíîñòåé ôàéëîâ ñïåöèàëüíîãî òèïà: ôàéëû áàéò-îðèåíòèðîâàííûõ è áëîêîðèåíòèðîâàííûõ óñòðîéñòâ, èìåíà ñîêåòîâ, èìåíîâàííûå êàíàëû (FIFO) è,íàêîíåö, ñèìâîëè÷åñêèå ññûëêè.  ýòîì ïàðàãðàôå ìû ðàññìîòðèì ñèìâîëè÷åñêèå ññûëêè; ê îñòàëüíûì òèïàì ôàéëîâ ìû âåðíåìñÿ ïîçæå.Ñèìâîëè÷åñêàÿ ññûëêà (àíãë. symbolic link ) ïðåäñòàâëÿåò ñîáîé ôàéë ñïåöèàëüíîãî òèïà, ñîäåðæàùèé èìÿ äðóãîãî ôàéëà.
Îïåðàöèÿ îòêðûòèÿ ñèìâîëè÷åñêîé ññûëêè íà ÷òåíèå èëè çàïèñü ïðèâîäèò íà ñàìîì äåëå ê îòêðûòèþôàéëà, íà êîòîðûé îíà ññûëàåòñÿ, à íå åå ñàìîé. îòëè÷èå îò æåñòêîé ññûëêè, ñèìâîëè÷åñêàÿ ññûëêà ëåãêî îòëè÷èìà îòîñíîâíîãî èìåíè ôàéëà. Ñèìâîëè÷åñêàÿ ññûëêà èìååò ñâîé ñîáñòâåííûé íîìåð èíäåêñíîãî äåñêðèïòîðà è èìååò ñâîé òèï. Ñîçäàíèå è óäàëåíèå ñèìâîëè÷åñêîé ññûëêè íèêàê íå çàòðàãèâàåò íè ôàéë, íà êîòîðûé îíà ññûëàåòñÿ, íèåãî èíäåêñíûé äåñêðèïòîð. Áîëåå òîãî, ôàéë, íà êîòîðûé óêàçûâàåò ññûëêà,ìîæåò âîîáùå íå ñóùåñòâîâàòü â ìîìåíò åå ñîçäàíèÿ, èëè ìîæåò áûòü óäàëåíïîçäíåå.Ñèìâîëè÷åñêèå ññûëêè ñîçäàþòñÿ âûçîâîìint symlink(const char *oldpath, const char *newpath);î÷åíü ïîõîæèì íà óæå ðàññìàòðèâàâøèéñÿ âûçîâ link(). Óäàëåíèå ñèìâîëè÷åñêîé ññûëêè ïðîèñõîäèò óæå ðàññìîòðåííûì âûçîâîì unlink().75Äëÿ ñîçäàíèÿ ñèìâîëè÷åñêîé ññûëêè ñðåäñòâàìè êîìàíäíîé ñòðîêè ñëåäóåò èñïîëüçîâàòü óæå ðàññìàòðèâàâøóþñÿ êîìàíäó ln ñ ôëàãîì -s:$ ln -s /path/to/old/name new_name12.2.5Ïðàâà äîñòóïà ê ôàéëàìÏðàâà äîñòóïà ê ôàéëó (àíãë.