![]() |
|
Модераторы: korob2001, ginnie |
![]()
|
|
| Valeria |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 277 Регистрация: 16.5.2006 Где: Санкт-Петербург Репутация: нет Всего: нет |
в скрипте перед открытием файла на чтение надо проверить не использует ли его кто-то другой?!
в частности, надо точно знать, что в него закончена запись. чтобы потом читать! как это сделать??? |
|||
|
||||
| Bikutoru |
|
|||
|
Увлекающийся ![]() ![]() Профиль Группа: Участник Сообщений: 522 Регистрация: 24.5.2005 Где: Москва Репутация: нет Всего: 22 |
Не знаю, есть ли возможность узнать пользуется ли кто-то еще этим файлом.
Но есть возможность "синхронизировать" доступ к файлу с помощью функции flock. Вот ссылки по данной теме: http://www.linux.org.ru/books/perl-faq/ru-...aq-8.html#ss8.4 http://www.linux.org.ru/books/perl-faq/ru-...-11.html#ss11.1 http://webmastak.com/articles/2005/03/18/no-flock/ -------------------- Человек, словно в зеркале мир — многолик, Он ничтожен — и он же безмерно велик! Омар Хайям |
|||
|
||||
| Valeria |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 277 Регистрация: 16.5.2006 Где: Санкт-Петербург Репутация: нет Всего: нет |
а как пользоваться функцией flock?
почему он пишет, что файл не открыт?
Это сообщение отредактировал(а) Valeria - 20.9.2006, 13:30 |
||||
|
|||||
| Bikutoru |
|
|||
|
Увлекающийся ![]() ![]() Профиль Группа: Участник Сообщений: 522 Регистрация: 24.5.2005 Где: Москва Репутация: нет Всего: 22 |
"На первой ссылке" есть замечательный, хорошо прокомментированный пример:
А использовать flock в цикле не нужно - достаточно воспользоваться им один раз. Ведь flock это синхронизирующая функция - пока с этим файлом работает один поток, другой туда доступа не получит (программа во втором потоке приостановит свое выполнение на вызове flock и возобновит только после освобождения файла первым потоком). -------------------- Человек, словно в зеркале мир — многолик, Он ничтожен — и он же безмерно велик! Омар Хайям |
|||
|
||||
| Valeria |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 277 Регистрация: 16.5.2006 Где: Санкт-Петербург Репутация: нет Всего: нет |
спасибо, только это мне не подойдет. я блокирую файл, а мне надо знать, что он уже готов к использованию.
мне предложили другой способ, но не знаю, как проверить, что он работает.
т.е. ждать пока размер файла меняется, только как угадать, может он будет раз в 20 сек. меняться, а я 19 поставлю. уже не сработает. просто не знаю, каким образом формируется этот файл. |
|||
|
||||
| amg |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1145 Регистрация: 3.8.2006 Где: Новосибирск Репутация: 38 Всего: 50 |
Valeria, все же Bikutoru предлагает наиболее правильное решение! Дело в том, что flock - это системная функция, и ею пользуются не только перловские скрипты, но все другие программы, работающие с файлами (если они аккуратно сделаны). Так что если файл открыт другой программой, то flock просто не даст Вашему скрипту ничего с ним сделать, пока эта другая программа файл не закроет. И наоборот, если Ваш скрипт открыл файл, то другая программа его не тронет. А если две программы пытаются одновременно работать с одним и тем же файлом без flock, то, скорее всего этот файл в конце концов будет просто испорченным.
|
|||
|
||||
| amg |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1145 Регистрация: 3.8.2006 Где: Новосибирск Репутация: 38 Всего: 50 |
Если есть подозрение, что другая программа не использует flock, то всякие проверки на неизменность файла делать нужно, но flock тоже неплохо использовать (а вдруг другая программа все же использует flock, и тогда просто эти проверки наверняка окажутся успешными).
|
|||
|
||||
| Valeria |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 277 Регистрация: 16.5.2006 Где: Санкт-Петербург Репутация: нет Всего: нет |
т.е. предлагаешь использовать и проверку на неизменность файла и блокировку.
тогда, что первым смотреть? неизменность файла видимо, а потом блок ставить? |
|||
|
||||
| Bikutoru |
|
|||
|
Увлекающийся ![]() ![]() Профиль Группа: Участник Сообщений: 522 Регистрация: 24.5.2005 Где: Москва Репутация: нет Всего: 22 |
Так блокировка в том и заключается, что если вы уже испорльзуете flock на одном потоке, то на втором flock не просто блокирует файл, а ждет, пока первый поток не разблокирует файл, и только после этого блокирует файл сам и продолжается выполнение скрипта. Хотя если хотя бы на одном из потоков flock не используется, то использовать его на остальных смысла нет. А что если размер файла уменьшится, тогда ваш будет вариант непригоден -------------------- Человек, словно в зеркале мир — многолик, Он ничтожен — и он же безмерно велик! Омар Хайям |
|||
|
||||
| Valeria |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 277 Регистрация: 16.5.2006 Где: Санкт-Петербург Репутация: нет Всего: нет |
уменьшаться не будет - 100% (это известно).
в том все и дело, что я не знаю, будет ли использоваться блокировка, т.к. не я занимаюсь формированием файла. мне надо было только узнать, готов файл или нет. я не уверена, что блокировка будет стоять и функция flock ее распознает?! Это сообщение отредактировал(а) Valeria - 21.9.2006, 10:20 |
||||
|
|||||
| Bikutoru |
|
|||
|
Увлекающийся ![]() ![]() Профиль Группа: Участник Сообщений: 522 Регистрация: 24.5.2005 Где: Москва Репутация: нет Всего: 22 |
Т.е. задача заключается в том, чтобы записать что-то в файл, который формирует какой-то недоступный даже для просмотра скрипт (или программа)? При этом сам формат файла неизвестен
-------------------- Человек, словно в зеркале мир — многолик, Он ничтожен — и он же безмерно велик! Омар Хайям |
|||
|
||||
| Valeria |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 277 Регистрация: 16.5.2006 Где: Санкт-Петербург Репутация: нет Всего: нет |
задача такая: скрипт должен взять файл с данными формата *.dat и начать с ним работать, но надо быть уверенным, что этот файл готов к использованию, т.е. запись в него выпонена, и больше его никто не использует. вот мне и надо устроить такую проверку!!! |
|||
|
||||
| nitr |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2543 Регистрация: 10.2.2006 Где: Россия :) Репутация: 37 Всего: 84 |
Valeria, прочтите про файл-серверы ;)
|
|||
|
||||
| Valeria |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 277 Регистрация: 16.5.2006 Где: Санкт-Петербург Репутация: нет Всего: нет |
Когда с работы уволят, будет уже поздно читать. вообще, мое время вышло, надо было уже скрипт написать.
так что, в свободное от работы время буду мучиться этим вопросом, теь более в переди выходные. если здесь не найду ответа!!! |
|||
|
||||
| nitr |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2543 Регистрация: 10.2.2006 Где: Россия :) Репутация: 37 Всего: 84 |
Valeria,
тебе тут уже всё "рассосали"... всё что можно, есть модули, может кто найдёт, у меня корпоративка, запрещены некоторые сайты search.cpan.org тут искать |
|||
|
||||
![]()
|
| Правила форума "Perl" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |