Открываем файл,

User avatar
A. Fig Lee
Уже с Приветом
Posts: 12072
Joined: 17 Nov 2002 03:41
Location: английская колония

Post by A. Fig Lee »

f_evgeny wrote:
A. Fig Lee wrote:
f_evgeny wrote:Вот, это наверное решение на поставленный вопрос. Вт только ИМХО, вопрос поставлен кривовато и так решать хотя и возможно, но на мой взгляд немного некошерно.


Muzhiki! Vy zabodali uzhe! Povtorjaju op'jat': dimon, Solaris 8 (mozhet Linux Red Hat) - pishet chasto i mnogo v fajl. Fajl v etot moment ktoto vzjal i udalil.

Зачем же так волноваться?

Так евгений, Вы б почитали скоко раз я пересказывал содержание. На 4-й раз всегда положено волноватся. В Унихах всегда так.
Вы вправе делать то, что хотите. Но ситуация неправильная.
Такие ситуации бывают только в военное время, когда снаряд попадает в голову. Интересен контекст, в котором у демона, который пишет файл, кто-то берет его и удаляет. :D

Well. Стоять то будет не у нас. Может и за океаном. Че там за жизнь и порядки - неизвестно. Приказано - сделать так, значит надо делать. Ну не скажу ж я менегеру - "ты там проследи, чтоб идиотов к компьютеру не подпускали и все будет ок".
Верить нельзя никому - даже себе. Мне - можно!
User avatar
A. Fig Lee
Уже с Приветом
Posts: 12072
Joined: 17 Nov 2002 03:41
Location: английская колония

Post by A. Fig Lee »

Да, мужики, did I say thanks?
Спасибо всем. :gen1:
Верить нельзя никому - даже себе. Мне - можно!
User avatar
f_evgeny
Уже с Приветом
Posts: 10367
Joined: 12 Apr 2001 09:01
Location: Lithuania/UK

Post by f_evgeny »

A. Fig Lee wrote:Стоять то будет не у нас. Может и за океаном. Че там за жизнь и порядки - неизвестно. Приказано - сделать так, значит надо делать. Ну не скажу ж я менегеру - "ты там проследи, чтоб идиотов к компьютеру не подпускали и все будет ок".

Да я так и думал, что выбирать способ решения не получается. Но, ведь Вам нужно решить проблему, а нам (остальным) еще и пообщаться.
Кстати, в порядке светской беседы, сейчас, в связи с массовым приходом разработчиков из Windows в UNIX, они тащат с собой и свои подходы и решения.
К примеру в fido7.ru.linux одна из самых типовых ситуаций, когда спрашивают: Как мне сделать X? В процессе обсуждения выясняется, что вообще-то в UNIX такой вопрос не корректен, так как проблема решается вообще другим путем, при котором вопрос X вообще не возникает.
А возникают совсем другие вопросы.
User avatar
f_evgeny
Уже с Приветом
Posts: 10367
Joined: 12 Apr 2001 09:01
Location: Lithuania/UK

Post by f_evgeny »

Pink Panther wrote:
A. Fig Lee wrote:Прекрасно. Вернемся к оригинальному вопросу - как выловить что файл был "rm-ed"?
Единственно приходит в голову - периодически чекать директори ентри.


Какой кошмар, ну прямо каменный век какой-то! :wink: А вот в Windows :lol: :umnik1: есть замечательная фунция ReadDirectoryChangesW, которая сама все изменения рапортует. В юниксе наверняка есть что-то подобное.

Вот вроде всем ясно как удаляется файл в Юниксе. А как делается то же самое в виндовс? С точки зрения пользователя иногда надо удалить файл, который открыт другим приложением. Как разруливается в Виндовс такая ситуация?
User avatar
lx_uk
Уже с Приветом
Posts: 376
Joined: 04 Feb 2002 10:01

Post by lx_uk »

f_evgeny wrote:Вот вроде всем ясно как удаляется файл в Юниксе. А как делается то же самое в виндовс? С точки зрения пользователя иногда надо удалить файл, который открыт другим приложением. Как разруливается в Виндовс такая ситуация?

В Windows если при открытии файла не указан флаг FILE_SHARE_DELETE (а обычно оно так и есть) то открытый файл лочиться и система не даст его удалить. Удалить его можно во время следующей перезагрузки с помощью MoveFileEx, например.

Но вообще в Windows этикет тот же что и в Unix. Если файл залочен - не тебе его удалять. Если же ты администратор - то сам будешь виноват если удалишь нужный файл.
User avatar
f_evgeny
Уже с Приветом
Posts: 10367
Joined: 12 Apr 2001 09:01
Location: Lithuania/UK

Post by f_evgeny »

lx_uk wrote:
f_evgeny wrote:Вот вроде всем ясно как удаляется файл в Юниксе. А как делается то же самое в виндовс? С точки зрения пользователя иногда надо удалить файл, который открыт другим приложением. Как разруливается в Виндовс такая ситуация?

В Windows если при открытии файла не указан флаг FILE_SHARE_DELETE (а обычно оно так и есть) то открытый файл лочиться и система не даст его удалить. Удалить его можно во время следующей перезагрузки с помощью MoveFileEx, например.

Но вообще в Windows этикет тот же что и в Unix. Если файл залочен - не тебе его удалять. Если же ты администратор - то сам будешь виноват если удалишь нужный файл.

Есть некоторые различия с UNIX,
технические - там (грубо) не дают удалить файл только права на директорий
организационные - в UNIX есть стандарт на организацию файловой системы, в Виндовс с этим похуже.
User avatar
tengiz
Уже с Приветом
Posts: 4468
Joined: 21 Sep 2000 09:01
Location: Sammamish, WA

Post by tengiz »

f_evgeny wrote:технические - там (грубо) не дают удалить файл только права на директорий
организационные - в UNIX есть стандарт на организацию файловой системы, в Виндовс с этим похуже.

Переведите на русский, pls?
Cheers
User avatar
f_evgeny
Уже с Приветом
Posts: 10367
Joined: 12 Apr 2001 09:01
Location: Lithuania/UK

Post by f_evgeny »

tengiz wrote:
f_evgeny wrote:технические - там (грубо) не дают удалить файл только права на директорий
организационные - в UNIX есть стандарт на организацию файловой системы, в Виндовс с этим похуже.

Переведите на русский, pls?

1. В первом приближении, удалить файл в UNIX может любой, у кого есть права на запись на директорий, в котором находится файл.
2. Я никогда не видел/слышал о документе (для виндовс), в котором было бы написано (с похожей например на FHS -file hierarhy standard для Линукса), какие файлы (по функциональному назначению) где должны находится в файловой иерархии. Возможно я ошибаюсь.
User avatar
lx_uk
Уже с Приветом
Posts: 376
Joined: 04 Feb 2002 10:01

Post by lx_uk »

f_evgeny wrote:2. Я никогда не видел/слышал о документе (для виндовс), в котором было бы написано (с похожей например на FHS -file hierarhy standard для Линукса), какие файлы (по функциональному назначению) где должны находится в файловой иерархии. Возможно я ошибаюсь.

Я бы сказал что подобные требования описываются в различных "Designed for Microsoft Windows NT/2000/XP/etc Logo Program Requirements".

<added>
http://www.microsoft.com/winlogo/softwa ... loads.mspx
</added>
User avatar
Strannik223
Уже с Приветом
Posts: 569
Joined: 14 Dec 2003 04:06
Location: Львов->Киев->Торонто

Post by Strannik223 »

lx_uk wrote:Я бы сказал что подобные требования описываются в различных "Designed for Microsoft Windows NT/2000/XP/etc Logo Program Requirements".


Требования есть, порядка нету. System32 наглядное тому потверждение. Это даже не безпорядок, это хаос какой то. И dll и exe, битмапы, логи, ресурсы, все что только можно там лежит большой кучей.
Одним из преимуществ организации файлов на Юнихе является то что файлы опрерационки и софта проинсталираваного самостоятательно лежат в разный директориях что делает возможным на порядки более простой апгрейд операционки. Инсталятор подразумевает что все что лежит в директориях опрерационки может быть безопасно удалено.
Убивает мерзкая привычка винды при запуске файла (exe or dll) лочить его. Из за этого до сих пор добрая половина инсталяторов програм требует знаменитого reboot.

В моей практике был случай когда я апгрейдил Юникс который в другом городе стоял. Причем апгрейд был тяжелый, менялся формат executable. На винде о таком и мечтать запрещено.
Никакой разрухи нет. (с) Проф. Преображенский.
User avatar
lx_uk
Уже с Приветом
Posts: 376
Joined: 04 Feb 2002 10:01

Post by lx_uk »

Strannik223 wrote:
lx_uk wrote:Я бы сказал что подобные требования описываются в различных "Designed for Microsoft Windows NT/2000/XP/etc Logo Program Requirements".

Требования есть, порядка нету. System32 наглядное тому потверждение. Это даже не безпорядок, это хаос какой то. И dll и exe, битмапы, логи, ресурсы, все что только можно там лежит большой кучей.


Совершенно верно.

Strannik223 wrote:Одним из преимуществ организации файлов на Юнихе является то что файлы опрерационки и софта проинсталираваного самостоятательно лежат в разный директориях что делает возможным на порядки более простой апгрейд операционки. Инсталятор подразумевает что все что лежит в директориях опрерационки может быть безопасно удалено.


Да. А что, кто-то возражает? Ну тогда это трудности возражающего.

Strannik223 wrote:Убивает мерзкая привычка винды при запуске файла (exe or dll) лочить его. Из за этого до сих пор добрая половина инсталяторов програм требует знаменитого reboot.


Что-то мне подсказывает, что ноги тут растут из FAT. :) Неудобно. А что делать? Было бы неплохо, чтобы с появлением NTFS эта проблема ушла бы в прошлое. Но в MS, видимо, считают это идеологически правильным.

Кстати, кто может прокомментировать технические сложности с удалением залоченного файла? Ведь на самом деле речь идет только об удалении записи из директории?

Strannik223 wrote:В моей практике был случай когда я апгрейдил Юникс который в другом городе стоял. Причем апгрейд был тяжелый, менялся формат executable. На винде о таком и мечтать запрещено.


Ну и что. Windows это-го не умеет. Какой толк повторять банальности?

PS. Хотя шаги предпринимаются. Все меньше critical patches с windowsupdate требуют перезагрузки, например. :)
User avatar
tengiz
Уже с Приветом
Posts: 4468
Joined: 21 Sep 2000 09:01
Location: Sammamish, WA

Post by tengiz »

Strannik223 wrote:...Убивает мерзкая привычка винды при запуске файла (exe or dll) лочить его. Из за этого до сих пор добрая половина инсталяторов програм требует знаменитого reboot.

В моей практике был случай когда я апгрейдил Юникс который в другом городе стоял. Причем апгрейд был тяжелый, менялся формат executable. На винде о таком и мечтать запрещено.

Причина этой привычки - двоичный файл является одновременно собственным файлом подкачки для кода/констант, поэтому его менять нельзя. Однако его по умолчанию можно переименовывать "на ходу". Откуда следует, что Ваш тяжёлый upgrade элементарно делается именно таким нехитрым способом - переимеровать исполняющийся exe/dll, затем записать новый с тем же именем куда нужно. При следующем запуске будет уже работать новый файл.
Cheers
User avatar
tengiz
Уже с Приветом
Posts: 4468
Joined: 21 Sep 2000 09:01
Location: Sammamish, WA

Post by tengiz »

f_evgeny wrote:1. В первом приближении, удалить файл в UNIX может любой, у кого есть права на запись на директорий, в котором находится файл.
OK, теперь понятно, что речь шла о UNIX. В Windows (как и во многих других ОС) имеется mandatory file locking - при открытии файла можно указать режимы блокирования, которые затем никем не могут быть игнорированы, в отличие от классического UNIX. Т.е. дополнительные препятствия для удаления/изменения сордержимого файлов кроме прав на файл и на директорию - это наличие активных процессов, открывших этот файл и специально попросивших его не трогать.
Cheers
User avatar
lx_uk
Уже с Приветом
Posts: 376
Joined: 04 Feb 2002 10:01

Post by lx_uk »

tengiz wrote:Причина этой привычки - двоичный файл является одновременно собственным файлом подкачки для кода/констант, поэтому его менять нельзя. Однако его по умолчанию можно переименовывать "на ходу". Откуда следует, что Ваш тяжёлый upgrade элементарно делается именно таким нехитрым способом - переимеровать исполняющийся exe/dll, затем записать новый с тем же именем куда нужно. При следующем запуске будет уже работать новый файл.

Тенгиз, а почему залоченный файл обязательно должен быть связан с элементом директории? Так что в результате файл можно переименовать но не удалить. Это особенности файловой системы (т.е. нечто "фундаментальное") или конкретной реализации?
User avatar
f_evgeny
Уже с Приветом
Posts: 10367
Joined: 12 Apr 2001 09:01
Location: Lithuania/UK

Post by f_evgeny »

tengiz wrote:
f_evgeny wrote:1. В первом приближении, удалить файл в UNIX может любой, у кого есть права на запись на директорий, в котором находится файл.
OK, теперь понятно, что речь шла о UNIX. В Windows (как и во многих других ОС) имеется mandatory file locking - при открытии файла можно указать режимы блокирования, которые затем никем не могут быть игнорированы, в отличие от классического UNIX. Т.е. дополнительные препятствия для удаления/изменения сордержимого файлов кроме прав на файл и на директорию - это наличие активных процессов, открывших этот файл и специально попросивших его не трогать.

Я не говорю плохо это, или хорошо, но, лично для меня из этого следует то, что многие вещи, которые в Юниксе реализуются на скриптах, в Виндовсе работать не будут. Или для того, чтобы они работали надо перезапускать компьютер.

Return to “Вопросы и новости IT”