Can't modify constant item in lock
От: johneeee  
Дата: 15.03.04 11:43
Оценка:
Доброго времени суток!

ActivePerl 5.8.3 под Windows упорно не хочет корректно вызывать lock. Например, есть код:

        open(FILE, "$boardsdir/$currentboard.dat") || error("$err{'001'} $boardsdir/$currentboard.dat");
        lock(FILE);
        chomp(@boardinfo=<FILE>);
        unlock(FILE);
        close(FILE);


И при попытке вызвать скрипт выдается такое сообщение об ошибке:

Can't modify constant item in lock at g:\site2\apache\htdocs\cgi-bin\admin\banners\view.cgi line 91, near "FILE)"

Если кто знает, объясните, пожалуйста, в чем тут дело? Если просто закомментировать lock, то скрипт работает, но это как-то криво...

В общем-то, это WebApp 0.9.9, если кому интересно. У него в настройках есть отключение каких-то lock, но эта опция не влияет на данную ошибку.
... << RSDN@Home 1.1.2 stable >>
Re: Can't modify constant item in lock
От: King Oleg Украина http://kingoleg.livejournal.com
Дата: 15.03.04 12:53
Оценка: +1
Здравствуйте, johneeee, Вы писали:

J>Доброго времени суток!


J>ActivePerl 5.8.3 под Windows упорно не хочет корректно вызывать lock. Например, есть код:


J>
J>        open(FILE, "$boardsdir/$currentboard.dat") || error("$err{'001'} $boardsdir/$currentboard.dat");
J>        lock(FILE);
J>        chomp(@boardinfo=<FILE>);
J>        unlock(FILE);
J>        close(FILE);

J>


J>И при попытке вызвать скрипт выдается такое сообщение об ошибке:


J>Can't modify constant item in lock at g:\site2\apache\htdocs\cgi-bin\admin\banners\view.cgi line 91, near "FILE)"

J>

J>Если кто знает, объясните, пожалуйста, в чем тут дело? Если просто закомментировать lock, то скрипт работает, но это как-то криво...

J>В общем-то, это WebApp 0.9.9, если кому интересно. У него в настройках есть отключение каких-то lock, но эта опция не влияет на данную ошибку.



На сколько я знаю, flock() реализован одинаково в Perl и в PHP — вызовом системной функцией. Вот что по этому поводу говорит документация к ПХП:

Warning
flock() will not work on NFS and many other networked file systems. Check your operating system documentation for more details.

On some operating systems flock() is implemented at the process level. When using a multithreaded server API like ISAPI you may not be able to rely on flock() to protect files against other PHP scripts running in parallel threads of the same server instance!

flock() is not supported on antiquated filesystems like FAT and its derivates and will therefore always return FALSE under this environments (this is especially true for Windows 98 users).

Скорее всего, то же верно и для Perl.
King Oleg
*Читайте DOC'и, они rules*
Re[2]: Can't modify constant item in lock
От: johneeee  
Дата: 15.03.04 14:16
Оценка:
Здравствуйте, King Oleg, Вы писали:

KO>На сколько я знаю, flock() реализован одинаково в Perl и в PHP — вызовом системной функцией. Вот что по этому поводу говорит документация к ПХП:

KO>

KO>Warning
KO>flock() will not work on NFS and many other networked file systems. Check your operating system documentation for more details.

KO>On some operating systems flock() is implemented at the process level. When using a multithreaded server API like ISAPI you may not be able to rely on flock() to protect files against other PHP scripts running in parallel threads of the same server instance!

KO>flock() is not supported on antiquated filesystems like FAT and its derivates and will therefore always return FALSE under this environments (this is especially true for Windows 98 users).

KO>Скорее всего, то же верно и для Perl.

В общем-то, у меня были подозрения, что это может быть из-за файловой системы, я на всякий случай попробовал переставить Apache
и Perl с FAT32 на NTFS, операционная система windows 2000. То есть, вроде бы это не NFS, не FAT и не ISAPI. Но это не решило проблему.
Ошибка эта происходит во время компиляции, то есть, реально в момент компиляции ничего, вроде бы, не лочится. И текст ошибки, вроде бы,
говорит о том, что компилятору просто не нравится, что lock, по его мнению, пытается изменить константу, насколько я понял. То есть, может быть с синтаксисом что-то не так?
Почему он считает FILE константой непонятно.
... << RSDN@Home 1.1.2 stable >>
Re[3]: Can't modify constant item in lock
От: King Oleg Украина http://kingoleg.livejournal.com
Дата: 15.03.04 14:54
Оценка: +1
Здравствуйте, johneeee, Вы писали:

J>Здравствуйте, King Oleg, Вы писали:


J>Почему он считает FILE константой непонятно.

Попробуй вместо lock() написать flock(). Должно помочь.
King Oleg
*Читайте DOC'и, они rules*
Re[4]: Can't modify constant item in lock
От: johneeee  
Дата: 15.03.04 19:19
Оценка:
Здравствуйте, King Oleg, Вы писали:

J>>Почему он считает FILE константой непонятно.

KO>Попробуй вместо lock() написать flock(). Должно помочь.

Да, работает, только нужно добавлять второй аргумент. Типа такого получается:
flock(FILE, LOCK_EX);


Ок, спасибо! Жалко только, что придется все править.
... << RSDN@Home 1.1.2 stable >>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.