Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: flock(защита файлов от изменений их внутри)
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
flock - блокирование файла от одновременного доступа. И то только если все желающие что-то сделать с файлом сперва просят блокировку.
----- PostgreSQL DBA
sKaa
Отправлено: 26 Мая, 2012 - 19:51:39
Частый посетитель
Покинул форум
Сообщений всего: 979
Дата рег-ции: Окт. 2011 Откуда: Россия г. Нижний Новгород
Помог: 25 раз(а)
[+]
Может потому, что flock "запирает" файл от всех других процессов кроме текущего...
OrmaJever
Отправлено: 26 Мая, 2012 - 19:52:25
Активный участник
Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010 Откуда: Чернигов
Помог: 299 раз(а)
скрипт выполняется доли секунды, после завершения блокировка снимается, вы просто не попали в эти доли секунды.
----- Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
kilogram
Отправлено: 26 Мая, 2012 - 19:56:31
Частый гость
Покинул форум
Сообщений всего: 171
Дата рег-ции: Март 2012
Помог: 0 раз(а)
То есть нужно чтоб скрипт выполнялся больш секунды?
OrmaJever
Отправлено: 26 Мая, 2012 - 20:14:49
Активный участник
Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010 Откуда: Чернигов
Помог: 299 раз(а)
kilogram эта функция не должна намертво блокировать файл, а только что бы всё записывалось последовательно. Это аналок Мьютексов из Си, когда программа работает в несколько потоков и каждый записывает что-то в файл то будет писатся как попало, а блокировка упорядочивает запись.
Например вы взяли последнюю строку из файла (пусть это будет число) и решили прибавить к нему 1, но в это время кто-то ещё запустил скрипт и он отработал быстрее и когда вы будете записывать то будет уже не верное (два одинаковых) значение т.к. вы и другая копия скрипта взяли одно и тоже значение. Вот имено для этого и нужны блокировки.
----- Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
DeepVarvar
Отправлено: 26 Мая, 2012 - 20:27:18
Активный участник
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
Вау ребята, обсуждадэ, а работает ли это вообще под вяндами? (Добавление)
Ану смастрякайте тест у кого форточки
Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010
Помог: 322 раз(а)
OrmaJever пишет:
эта функция не должна намертво блокировать файл, а только что бы всё записывалось последовательно.
не
намертво блокирует и все
пока не освободит никто писать не может
только читать
ну это от режима зависит
да? (Добавление) DeepVarvar зачем? пишут что можно
нальзя только продолжить без ожидания блокировки в винде
OrmaJever
Отправлено: 26 Мая, 2012 - 20:49:28
Активный участник
Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010 Откуда: Чернигов
Помог: 299 раз(а)
DeepVarvar пишет:
Вау ребята, обсуждадэ, а работает ли это вообще под вяндами?
Цитата:
Замечание: flock() является обязательным под Windows.
Да подними ты винду в своих глазах на пару ступеней, не настолько она плохая. Чес слово. (Добавление)
LIME пишет:
намертво блокирует и все
Я не это имел ввиду, да она блокирует намертво, но только во время работы скрипта, ТС видимо решил что запустил скрипт он заблокировал файл и дальше ОС не может его вобще использовать. Это даже описано в описании функции flock().
Цитата:
Блокировка снимается при помощи этой же функции fclose() (которая также автоматически вызывается при завершении выполнения скрипта).
----- Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
DeepVarvar
Отправлено: 26 Мая, 2012 - 20:57:49
Активный участник
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
OrmaJever пишет:
Да подними ты винду в своих глазах на пару ступеней
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.