Модераторы: korob2001, ginnie

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> проверить файл не используют ли его другие процесс, какие есть функции??? 
V
    Опции темы
Valeria
Дата 20.9.2006, 11:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 277
Регистрация: 16.5.2006
Где: Санкт-Петербург

Репутация: нет
Всего: нет



в скрипте перед открытием файла на чтение надо проверить не использует ли его кто-то другой?!
в частности, надо точно знать, что в него закончена запись. чтобы потом читать!
как это сделать???
PM MAIL ICQ   Вверх
Bikutoru
Дата 20.9.2006, 12:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Увлекающийся
**


Профиль
Группа: Участник
Сообщений: 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/


--------------------
Человек, словно в зеркале мир — многолик, 
Он ничтожен — и он же безмерно велик!
Омар Хайям
PM   Вверх
Valeria
Дата 20.9.2006, 13:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 277
Регистрация: 16.5.2006
Где: Санкт-Петербург

Репутация: нет
Всего: нет



а как пользоваться функцией flock?
Код

open $CDRFile, "<", "$filename.dat" or die "Can't open file '$filename.dat': $!\n";
until(flock($CDRFile,2)){
sleep(1);
}


почему он пишет, что файл не открыт?

Код

flock() on unopened filehandle at script.pl



Это сообщение отредактировал(а) Valeria - 20.9.2006, 13:30
PM MAIL ICQ   Вверх
Bikutoru
Дата 20.9.2006, 16:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Увлекающийся
**


Профиль
Группа: Участник
Сообщений: 522
Регистрация: 24.5.2005
Где: Москва

Репутация: нет
Всего: 22



"На первой ссылке" есть замечательный, хорошо прокомментированный пример:
Код

use Fcntl; # Импорт констант
open (HOSTS, '>>hosts.log'); # Файл открыт для добавления записи
flock(HOSTS, LOCK_EX); 
# Теперь файл заблокирован: Если любой другой скрипт тоже вызовет flock на
# этом файле, его flock не вернет управление в программу, пока мы не
# разблокируем файл. Обратите внимание: flock -- декларативная функция, если
# один из скриптов ее не использует при записи, то вся ваша блокировка не
# работает.
print HOSTS $ENV{REMOTE_HOST}, "\n"; # записали строку
close HOSTS; # Файл при закрытии разблокируется автоматически


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


--------------------
Человек, словно в зеркале мир — многолик, 
Он ничтожен — и он же безмерно велик!
Омар Хайям
PM   Вверх
Valeria
Дата 20.9.2006, 16:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 277
Регистрация: 16.5.2006
Где: Санкт-Петербург

Репутация: нет
Всего: нет



спасибо, только это мне не подойдет. я блокирую файл, а мне надо знать, что он уже готов к использованию.
мне предложили другой способ, но не знаю, как проверить, что он работает.
Код

while ( -s $CDRFile >$size ) { 
$size = -s $CDRFile; 
sleep 5; 
}

т.е. ждать пока размер файла меняется, только как угадать, может он будет раз в 20 сек. меняться, а я 19 поставлю.
уже не сработает. просто не знаю, каким образом формируется этот файл.
PM MAIL ICQ   Вверх
amg
Дата 21.9.2006, 06:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1145
Регистрация: 3.8.2006
Где: Новосибирск

Репутация: 38
Всего: 50



Valeria, все же Bikutoru предлагает наиболее правильное решение! Дело в том, что flock - это системная функция, и ею пользуются не только перловские скрипты, но все другие программы, работающие с файлами (если они аккуратно сделаны). Так что если файл открыт другой программой, то flock просто не даст Вашему скрипту ничего с ним сделать, пока эта другая программа файл не закроет. И наоборот, если Ваш скрипт открыл файл, то другая программа его не тронет. А если две программы пытаются одновременно работать с одним и тем же файлом без flock, то, скорее всего этот файл в конце концов будет просто испорченным.
PM MAIL   Вверх
amg
Дата 21.9.2006, 06:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1145
Регистрация: 3.8.2006
Где: Новосибирск

Репутация: 38
Всего: 50



Если есть подозрение, что другая программа не использует flock, то всякие проверки на неизменность файла делать нужно, но flock тоже неплохо использовать (а вдруг другая программа все же использует flock, и тогда просто эти проверки наверняка окажутся успешными).
PM MAIL   Вверх
Valeria
Дата 21.9.2006, 09:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 277
Регистрация: 16.5.2006
Где: Санкт-Петербург

Репутация: нет
Всего: нет



т.е. предлагаешь использовать и проверку на неизменность файла и блокировку. 
тогда, что первым смотреть? неизменность файла видимо, а потом блок ставить?
PM MAIL ICQ   Вверх
Bikutoru
Дата 21.9.2006, 10:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Увлекающийся
**


Профиль
Группа: Участник
Сообщений: 522
Регистрация: 24.5.2005
Где: Москва

Репутация: нет
Всего: 22



Цитата(Valeria @  20.9.2006,  17:18 Найти цитируемый пост)
я блокирую файл, а мне надо знать, что он уже готов к использованию

Так блокировка в том и заключается, что если вы уже испорльзуете flock на одном потоке, то на втором flock не просто блокирует файл, а ждет, пока первый поток не разблокирует файл, и только после этого блокирует файл сам и продолжается выполнение скрипта. Хотя если хотя бы на одном из потоков flock не используется, то использовать его на остальных смысла нет.

Цитата(Valeria @  20.9.2006,  17:18 Найти цитируемый пост)
ждать пока размер файла меняется, только как угадать, может он будет раз в 20 сек. меняться, а я 19 поставлю.
уже не сработает. просто не знаю, каким образом формируется этот файл

А что если размер файла уменьшится, тогда ваш будет вариант непригоден



--------------------
Человек, словно в зеркале мир — многолик, 
Он ничтожен — и он же безмерно велик!
Омар Хайям
PM   Вверх
Valeria
Дата 21.9.2006, 10:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 277
Регистрация: 16.5.2006
Где: Санкт-Петербург

Репутация: нет
Всего: нет



Цитата

А что если размер файла уменьшится, тогда ваш будет вариант непригоден

уменьшаться не будет - 100% (это известно).

Цитата

если вы уже испорльзуете flock на одном потоке, то на втором flock не просто блокирует файл


в том все и дело, что я не знаю, будет ли использоваться блокировка, т.к. не я занимаюсь формированием файла. 
мне надо было только узнать, готов файл или нет. 

я не уверена, что блокировка будет стоять и функция flock ее распознает?!


Это сообщение отредактировал(а) Valeria - 21.9.2006, 10:20
PM MAIL ICQ   Вверх
Bikutoru
Дата 21.9.2006, 10:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Увлекающийся
**


Профиль
Группа: Участник
Сообщений: 522
Регистрация: 24.5.2005
Где: Москва

Репутация: нет
Всего: 22



Т.е. задача заключается в том, чтобы записать что-то в файл, который формирует какой-то недоступный даже для просмотра скрипт (или программа)? При этом сам формат файла неизвестен


--------------------
Человек, словно в зеркале мир — многолик, 
Он ничтожен — и он же безмерно велик!
Омар Хайям
PM   Вверх
Valeria
Дата 21.9.2006, 11:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 277
Регистрация: 16.5.2006
Где: Санкт-Петербург

Репутация: нет
Всего: нет




задача такая: скрипт должен взять файл с данными формата *.dat и начать с ним работать, но надо быть уверенным, что этот файл готов к использованию, т.е. запись в него выпонена, и больше его никто не использует.
вот мне и надо устроить такую проверку!!!
PM MAIL ICQ   Вверх
nitr
Дата 21.9.2006, 11:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2543
Регистрация: 10.2.2006
Где: Россия :)

Репутация: 37
Всего: 84



Valeria, прочтите про файл-серверы ;)


--------------------
PM   Вверх
Valeria
Дата 21.9.2006, 13:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 277
Регистрация: 16.5.2006
Где: Санкт-Петербург

Репутация: нет
Всего: нет



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

если здесь не найду ответа!!!
PM MAIL ICQ   Вверх
nitr
Дата 21.9.2006, 13:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2543
Регистрация: 10.2.2006
Где: Россия :)

Репутация: 37
Всего: 84



Valeria, smile) "работа не по голове" ;)
тебе тут уже всё "рассосали"... всё что можно, есть модули, может кто найдёт, у меня корпоративка, запрещены некоторые сайты smile
search.cpan.org тут искать


--------------------
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0554 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.