A. Fig Lee wrote:Good. Very good. Very brilliant idea. Будем щупать. Thanks.Strannik223 wrote:А может так: при открытии файла создаем hardlink...
А разве VC не именно это и предлагал?
tengiz wrote:A. Fig Lee wrote:Good. Very good. Very brilliant idea. Будем щупать. Thanks.Strannik223 wrote:А может так: при открытии файла создаем hardlink...
А разве VC не именно это и предлагал?
A. Fig Lee wrote:tengiz wrote:A. Fig Lee wrote:Good. Very good. Very brilliant idea. Будем щупать. Thanks.Strannik223 wrote:А может так: при открытии файла создаем hardlink...
А разве VC не именно это и предлагал?
нет. не совсем. Такие мысли у меня в голове тоже крутились, но хардлинк в голову не пришел.
Code: Select all
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
int main() {
if (link("a.dat", "a.dat.bck") == -1) /* <- This is a hardlink */
{printf("Could not create a backup name: %d\n", errno); exit(2);}
sleep(10);
if (rename("a.dat.bck", "a.dat") == -1) {
if (errno == EEXIST) unlink("a.dat.bck");
else printf("Error renaming : %d\n", errno);
}
}
Strannik223 wrote:А может так: при открытии файла создаем hardlink с каки нибудь "мусорным названием" а при закрытии проверяем, если орининал не был удален шаловливыми ручками то удаляем hardlink а если наш файл убили, то переименовываем hardlinked file to original name. Только надо бы предусмотреть зачистку hardlink-ов которые остаются в результате крешей.
Правда остается возможной диверсия: кто то удалил файл и создал новый с таким же именем.
An application (or a group of inter-related applications) must use a subdirectory of /var/lib for its data.
tengiz wrote:Злостный оффтопик.
....
Юмор, конечно, понятен - а что за копирайт на шутку N 21?
vc wrote:Actually, what I suggested earlier was indeed a hardlink. I could not care less who offered what and in what specific order, but perhapse the OP does not know what a hardlink is. So for educational purposes, here's the code again:Code: Select all
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
....
You know, that Stevens's book is mighty good ...
VC
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.
vc wrote:Actually, what I suggested earlier was indeed a hardlink. I could not care less who offered what and in what specific order, but perhapse the OP does not know what a hardlink is. So for educational purposes, here's the code again:
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.
Зачем же так волноваться?
Вы вправе делать то, что хотите. Но ситуация неправильная.
Такие ситуации бывают только в военное время, когда снаряд попадает в голову. Интересен контекст, в котором у демона, который пишет файл, кто-то берет его и удаляет.
A. Fig Lee wrote:Стоять то будет не у нас. Может и за океаном. Че там за жизнь и порядки - неизвестно. Приказано - сделать так, значит надо делать. Ну не скажу ж я менегеру - "ты там проследи, чтоб идиотов к компьютеру не подпускали и все будет ок".
Pink Panther wrote:A. Fig Lee wrote:Прекрасно. Вернемся к оригинальному вопросу - как выловить что файл был "rm-ed"?
Единственно приходит в голову - периодически чекать директори ентри.
Какой кошмар, ну прямо каменный век какой-то! А вот в Windows есть замечательная фунция ReadDirectoryChangesW, которая сама все изменения рапортует. В юниксе наверняка есть что-то подобное.
f_evgeny wrote:Вот вроде всем ясно как удаляется файл в Юниксе. А как делается то же самое в виндовс? С точки зрения пользователя иногда надо удалить файл, который открыт другим приложением. Как разруливается в Виндовс такая ситуация?
lx_uk wrote:f_evgeny wrote:Вот вроде всем ясно как удаляется файл в Юниксе. А как делается то же самое в виндовс? С точки зрения пользователя иногда надо удалить файл, который открыт другим приложением. Как разруливается в Виндовс такая ситуация?
В Windows если при открытии файла не указан флаг FILE_SHARE_DELETE (а обычно оно так и есть) то открытый файл лочиться и система не даст его удалить. Удалить его можно во время следующей перезагрузки с помощью MoveFileEx, например.
Но вообще в Windows этикет тот же что и в Unix. Если файл залочен - не тебе его удалять. Если же ты администратор - то сам будешь виноват если удалишь нужный файл.
tengiz wrote:f_evgeny wrote:технические - там (грубо) не дают удалить файл только права на директорий
организационные - в UNIX есть стандарт на организацию файловой системы, в Виндовс с этим похуже.
Переведите на русский, pls?
f_evgeny wrote:2. Я никогда не видел/слышал о документе (для виндовс), в котором было бы написано (с похожей например на FHS -file hierarhy standard для Линукса), какие файлы (по функциональному назначению) где должны находится в файловой иерархии. Возможно я ошибаюсь.
lx_uk wrote:Я бы сказал что подобные требования описываются в различных "Designed for Microsoft Windows NT/2000/XP/etc Logo Program Requirements".
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.
Strannik223 wrote:В моей практике был случай когда я апгрейдил Юникс который в другом городе стоял. Причем апгрейд был тяжелый, менялся формат executable. На винде о таком и мечтать запрещено.
Strannik223 wrote:...Убивает мерзкая привычка винды при запуске файла (exe or dll) лочить его. Из за этого до сих пор добрая половина инсталяторов програм требует знаменитого reboot.
В моей практике был случай когда я апгрейдил Юникс который в другом городе стоял. Причем апгрейд был тяжелый, менялся формат executable. На винде о таком и мечтать запрещено.
OK, теперь понятно, что речь шла о UNIX. В Windows (как и во многих других ОС) имеется mandatory file locking - при открытии файла можно указать режимы блокирования, которые затем никем не могут быть игнорированы, в отличие от классического UNIX. Т.е. дополнительные препятствия для удаления/изменения сордержимого файлов кроме прав на файл и на директорию - это наличие активных процессов, открывших этот файл и специально попросивших его не трогать.f_evgeny wrote:1. В первом приближении, удалить файл в UNIX может любой, у кого есть права на запись на директорий, в котором находится файл.
tengiz wrote:Причина этой привычки - двоичный файл является одновременно собственным файлом подкачки для кода/констант, поэтому его менять нельзя. Однако его по умолчанию можно переименовывать "на ходу". Откуда следует, что Ваш тяжёлый upgrade элементарно делается именно таким нехитрым способом - переимеровать исполняющийся exe/dll, затем записать новый с тем же именем куда нужно. При следующем запуске будет уже работать новый файл.
tengiz wrote:OK, теперь понятно, что речь шла о UNIX. В Windows (как и во многих других ОС) имеется mandatory file locking - при открытии файла можно указать режимы блокирования, которые затем никем не могут быть игнорированы, в отличие от классического UNIX. Т.е. дополнительные препятствия для удаления/изменения сордержимого файлов кроме прав на файл и на директорию - это наличие активных процессов, открывших этот файл и специально попросивших его не трогать.f_evgeny wrote:1. В первом приближении, удалить файл в UNIX может любой, у кого есть права на запись на директорий, в котором находится файл.