|
|
|
|
|
для: Shorr Kan
(13.03.2006 в 21:38)
| | Если запрос к файлу идет не через Ваш скрипт - практически невозможно. Можно лишь пытаться сокращать вероятность попадания запроса в этот интервал.
Если через Ваш - можно, но сложно, долго и муторно. Нужно будет как-то организовывать критическую секцию в ветках выполнения запросов. Насколько вероятна такая ситуация, и самое главное - насколько она кошмарна? Что будет, если запрос не обнаружит файла? | |
|
|
|
|
|
|
|
для: Trianon
(13.03.2006 в 18:02)
| | Я не защищался, поэтому и спрашиваю - можно ли это сделать?
[поправлено модератором] | |
|
|
|
|
|
|
|
для: Shorr Kan
(13.03.2006 в 17:20)
| | А как Вы защищались от запроса к файлу в момент, когда выполняется copy() ? | |
|
|
|
|
|
|
|
для: Trianon
(13.03.2006 в 16:01)
| | Позволяет. Значит, наиболее быстрый вариант - создание временного файла, затем удаление настоящего и переименование? А нужно ли делать удаление - ведь достаточно переименовать временной в то же имя, что и настоящий...
И как защититься от запроса к несуществующему файлу? Ведь таковой запрос действительно может поступить между unlink и rename. | |
|
|
|
|
|
|
|
для: Shorr Kan
(13.03.2006 в 15:30)
| | Какими?
Чтобы скопировать файл, нужно открыть один файл, создать второй. А затем в цикле пока данные в первом файле не кончатся, читать данные из первого файла, и распределяя по ходу дела дисковое пространство, записывать их во второй. Потом оба файла закрыть.
Чтобы переименовать файл, нужно... обновить запись в каталоге, заменив в ней имя.
Все это конечно весьма грубо и многих тонкостей не учитывает, но разницу в сложности процессов позволяет рассмотреть. | |
|
|
|
|
|
|
|
для: Shorr Kan
(13.03.2006 в 15:30)
| | Операции переименования и удаления не работают непосредственно с даннами, только с таблицей FAT. Причем, операция удаления должна быть даже более быстрой чем переименования, так как в имени файла изменяется всего один символ:) | |
|
|
|
|
|
|
|
для: Trianon
(13.03.2006 в 10:08)
| | Не беру, ведь мне это неизвестно. Поделитесь подробностями, раз вы в курсе. | |
|
|
|
|
|
|
|
для: Shorr Kan
(13.03.2006 в 09:55)
| | А то, что rename - операция атомарная, и выполняется мгновенно, А copy - это целая процедура, время работы которой, грубо говоря, пропорционально размеру файла, это Вы в расчет не берете? | |
|
|
|
|
|
|
|
для: Trianon
(12.03.2006 в 20:16)
| | Две операции, вместо одной. | |
|
|
|
|
|
|
|
для: Shorr Kan
(12.03.2006 в 19:02)
| | unlink(); rename(); дольше copy() ?
Почему? | |
|
|
|
|