| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Perl: Общие вопросы > проверить файл не используют ли его другие процесс |
| Автор: Valeria 20.9.2006, 11:43 |
| в скрипте перед открытием файла на чтение надо проверить не использует ли его кто-то другой?! в частности, надо точно знать, что в него закончена запись. чтобы потом читать! как это сделать??? |
| Автор: Bikutoru 20.9.2006, 12:02 |
| Не знаю, есть ли возможность узнать пользуется ли кто-то еще этим файлом. Но есть возможность "синхронизировать" доступ к файлу с помощью функции flock. Вот ссылки по данной теме: http://www.linux.org.ru/books/perl-faq/ru-perl-faq-8.html#ss8.4 http://www.linux.org.ru/books/perl-faq/ru-perl-faq-11.html#ss11.1 http://webmastak.com/articles/2005/03/18/no-flock/ |
| Автор: Valeria 20.9.2006, 13:29 | ||||
а как пользоваться функцией flock?
почему он пишет, что файл не открыт?
|
| Автор: Bikutoru 20.9.2006, 16:08 | ||
"На первой ссылке" есть замечательный, хорошо прокомментированный пример:
А использовать flock в цикле не нужно - достаточно воспользоваться им один раз. Ведь flock это синхронизирующая функция - пока с этим файлом работает один поток, другой туда доступа не получит (программа во втором потоке приостановит свое выполнение на вызове flock и возобновит только после освобождения файла первым потоком). |
| Автор: Valeria 20.9.2006, 16:18 | ||
| спасибо, только это мне не подойдет. я блокирую файл, а мне надо знать, что он уже готов к использованию. мне предложили другой способ, но не знаю, как проверить, что он работает.
т.е. ждать пока размер файла меняется, только как угадать, может он будет раз в 20 сек. меняться, а я 19 поставлю. уже не сработает. просто не знаю, каким образом формируется этот файл. |
| Автор: amg 21.9.2006, 06:22 |
| Valeria, все же Bikutoru предлагает наиболее правильное решение! Дело в том, что flock - это системная функция, и ею пользуются не только перловские скрипты, но все другие программы, работающие с файлами (если они аккуратно сделаны). Так что если файл открыт другой программой, то flock просто не даст Вашему скрипту ничего с ним сделать, пока эта другая программа файл не закроет. И наоборот, если Ваш скрипт открыл файл, то другая программа его не тронет. А если две программы пытаются одновременно работать с одним и тем же файлом без flock, то, скорее всего этот файл в конце концов будет просто испорченным. |
| Автор: amg 21.9.2006, 06:42 |
| Если есть подозрение, что другая программа не использует flock, то всякие проверки на неизменность файла делать нужно, но flock тоже неплохо использовать (а вдруг другая программа все же использует flock, и тогда просто эти проверки наверняка окажутся успешными). |
| Автор: Valeria 21.9.2006, 09:30 |
| т.е. предлагаешь использовать и проверку на неизменность файла и блокировку. тогда, что первым смотреть? неизменность файла видимо, а потом блок ставить? |
| Автор: Valeria 21.9.2006, 10:20 | ||||
уменьшаться не будет - 100% (это известно).
в том все и дело, что я не знаю, будет ли использоваться блокировка, т.к. не я занимаюсь формированием файла. мне надо было только узнать, готов файл или нет. я не уверена, что блокировка будет стоять и функция flock ее распознает?! |
| Автор: Bikutoru 21.9.2006, 10:34 |
| Т.е. задача заключается в том, чтобы записать что-то в файл, который формирует какой-то недоступный даже для просмотра скрипт (или программа)? При этом сам формат файла неизвестен |
| Автор: Valeria 21.9.2006, 11:24 |
задача такая: скрипт должен взять файл с данными формата *.dat и начать с ним работать, но надо быть уверенным, что этот файл готов к использованию, т.е. запись в него выпонена, и больше его никто не использует. вот мне и надо устроить такую проверку!!! |
| Автор: nitr 21.9.2006, 11:37 |
| Valeria, прочтите про файл-серверы ;) |
| Автор: Valeria 21.9.2006, 13:32 |
| Когда с работы уволят, будет уже поздно читать. вообще, мое время вышло, надо было уже скрипт написать. так что, в свободное от работы время буду мучиться этим вопросом, теь более в переди выходные. если здесь не найду ответа!!! |
| Автор: nitr 21.9.2006, 13:49 |
| Valeria, тебе тут уже всё "рассосали"... всё что можно, есть модули, может кто найдёт, у меня корпоративка, запрещены некоторые сайты search.cpan.org тут искать |
| Автор: Valeria 21.9.2006, 14:38 | ||
За дуру меня только принимать не надо. по-моему, я спрашиваю не элементарные вещи. а если мне дали такую работу, то отказываться я не буду. не знаю я Perl, а в тему надо войти быстро. некогда мне читать книжки. я итак весь день по интернету ищу нужную информацию. nitr, не можешь помочь, так зачем вообще сюда заходишь?! |
| Автор: nitr 21.9.2006, 14:41 |
| Valeria, "сюда" куда? в этот топик? тебе выложили инфу... я так помню у тебя *nix, flock там работает ты же не принимаешь этого ответа наверное ждёшь готовый скрипт? Добавлено @ 14:41 которые я давал в ответ другим ;) |
| Автор: amg 21.9.2006, 15:27 |
| Valeria, беда в том, что вещи, о которых ты спрашиваешь, настолько не элементарные, что просто неразрешимы. И не только в перле. |
| Автор: Valeria 21.9.2006, 16:16 | ||
nitr, уже ничего не жду. разберусь как-нибудь. тем более у меня уже другие проблемы. |