|
|
|
| Возможно ли сохранить между сессиями указатель на файл?
Пример:
<?
ignore_user_abort(true);
set_time_limit(0);
$fp = fopen ("имя файла", "w");
// делаем монопольный доступ к файлу, т.е. запираем его
// дальше в цикле происходит чтение из одного файла и запись в выше открытый файл
?>
|
процедура копирования довольно длительная, и бывает случайно запускается несколько раз. как остановить такой процесс после закрытия окна - не знаю.
Можно ли сохранить как то указатель на файл, чтоб из другого скрипта зайти, разблокировать и закрыть файл?
Указатель на файл как пример привёл, тоже самое касается указателя при открытии сокетов. | |
|
|
|
|
|
|
|
для: Director_Of_Zoo
(23.04.2007 в 12:59)
| | По завершении работы скрипта эти операции выполнятся автоматически.
Файловые дескрипторы принадлежат процессам независимо. | |
|
|
|
|
|
|
|
для: Trianon
(23.04.2007 в 13:53)
| | Тото и оно что по ЗАВЕРШЕНИИ автоматом закрываются все незакрытые процессы. А если копирование будет сутки или двое? никак не забить процесс? Ведь наскока я знаю в линухе убив это файл по фтп не приведёт к убийству самого процесса. Поэтому я и говорю про сохранение дескриптора. | |
|
|
|
|
|
|
|
для: Director_Of_Zoo
(23.04.2007 в 14:14)
| | >Тото и оно что по ЗАВЕРШЕНИИ автоматом закрываются все незакрытые процессы.
По завершении процесса автоматом закрываются все файлы, открытые этим процессом.
>А если копирование будет сутки или двое?
Вы же сами отключили ограничение на время исполнения процесса?
никак не забить процесс?
Почти наверняка можно, если забивающий процесс добудет привилегии супервизора.
>Ведь наскока я знаю в линухе убив это файл по фтп не приведёт к убийству самого процесса.
Вы путаете причину и следствие. Завершение процесса приводит к закрытию файла, а не наоборот. Потому что файл открыт в рамках процесса, открывшего его, а не абстрактно - откупорен/закуперен. "Файл F открыт процессом P" означает, что на данный момент имеется некто P, с этим F активно что-то делающий.
Вы же предполагаете что придет Q, вмешается, и за P с ним (с F) что-то сделает. Максимум, что он сможет сделать - это грохнуть самого P, если хватит привилегий.
>Поэтому я и говорю про сохранение дескриптора.
Дескриптор бесполезно сохранять. За пределами контекста процесса он теряет всякий смысл. | |
|
|
|
|
|
|
|
для: Trianon
(23.04.2007 в 15:08)
| | Что же уважаемый Trianon посоветует? как быть в таком случае? | |
|
|
|
|
|
|
|
для: Director_Of_Zoo
(23.04.2007 в 21:15)
| | если я прально понял - так и открывать его когда нужно | |
|
|
|
|
|
|
|
для: Director_Of_Zoo
(23.04.2007 в 21:15)
| | Если вас беспокоит то, что в один и тот же файл начинают лезть сразу два процесса - обеспечьте проверку существования процесса.
Проверяйте существование файла (1) перед тем, как открывать его.
Алгоритм может быть примерно таким:
Если файл уже создан, значит с ним уже работают, выходим.
Если нет - создаем файл с временным именем - и начинаем в него писать данные.
По завершении копирования файла, переименовываем или переносим его на постоянное место дислокации.
(1) проверять надо именно временное имя. Пока файл с таким именем имеет место быть - идет процесс копирования. | |
|
|
|
|
|
|
|
для: Trianon
(23.04.2007 в 21:23)
| | Так как сам процесс копирования остановить?
я понимаю что и как определить есть ли копирование. Но вот вопрос - как его остановить? Мне не надо писать в файл кучей процессов, мне надо обеспечить возможность остановить копирование. | |
|
|
|