ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 

  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА














     АРХИВ :: Apache-Talk
Apache-Talk mailing list archive (apache-talk@lists.lexa.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [apache-talk] Re: [apache-talk] Re: [apache-talk] Как скопировать файл?



In <19990126223412.A8759@anguish.transas.com> Michael Sobolev (mss@transas.com) 
wrote:
MS> On Tue, Jan 26, 1999 at 09:17:52PM +0300, Sergey Mokryshev wrote:
>> UNIX'ы добавляют 1-цу к количеству ссылок в i-node (hard links)
>> при открытии файла и вычитают ее при закрытии. Пока количество
>> ссылок в i-node не станет равным нулю, файл с диска стерт не
>> будет и с ним можно продолжать работать.
MS> Это на самом деле так?

Почти. Более того -- для людей, которые не общались с Windows и DOS, а "всю свою
сознательную жизнь" возились с Unix'ом (в английском используется выражение
"Unix guys" :-) это настолько естественно, что они просто не понимают, что
может быть как-то иначе -- при попытке портировать RPM в Windows в это
уперлись... Потому как обычная процедура upgrade RPM'а заключется в том,
что выполняется какая-нибудь команда типа
rpm -Uvh rpm-2.5.6-1.i386.rpm
после чего rpm запускается, стирает себя и записывает на то же место новый
исполняемый файл (ни и конечно изменяет базу -- это уж само собой). Как это
перенести в Windows -- непонятно :-(( Только вот называется это как-то типа
reference count или что-то в этом духе: во всяком случае на диск при этом
ничего не пишется и количество hard link'ов у файла от этого не меняется (иначе
всякий эффект от опции монтирования noatime отсутствовал бы :-)

P.S. В Linux'е этот файл можно даже "поймать" в /proc/<pidnum>/fd/<fdnum>
(перебрав дескрипторы) и "спасти"... Конечно такой подход сработает только
если программа "держит" файл достаточно долго...

P.P.S. BTW именно поэтому нельзя стереть подкаталог, который является текущим
для какой-либо программы: у подкаталогов вышеописанный счетчик изменяется
и при смене текущего каталога, а удалять подкаталог разрешается только тогда,
когда счетчик будет равен 2 (в Linux'е -- в некоторых других *nix'ах (обычно
старых) дело обстоит не так и путем команд
-- cut --
mkdir testdir
ln testdir testdir/newlink
cp /bin/sh testdir
rm testdir
-- cut --
можно чудно тратить память на диске впустую; иногда прямо так не проходит,
но аналогичная программа на C срабатывает; иногда такие шутки доступны только
root'у :-)



=============================================================================
=               Apache-Talk@lists.lexa.ru mailing list                      =
Mail "unsubscribe apache-talk" to majordomo@lists.lexa.ru if you want to quit.
=       Archive avaliable at http://www.lexa.ru/apache-talk                 =



 




Copyright © Lexa Software, 1996-2009.