Проверка идет ли запись в файл

1. Михаил (23.11.2009 / 21:06)
Как проверить использует ли в данный момент какой-либо процесс файл для записи?

2. Владимир (23.11.2009 / 21:18)
lsof | grep имяфайла

3. Александр (23.11.2009 / 21:18)
попробуй так
$fp = fopen('/tmp/lock.txt','a');
if (flock($fp, LOCK_EX)) {
 echo 'Файл не используется.';
flock($fp, LOCK_UN);
} else {
    echo 'Файл занят.!';
}
	fclose($fp);


4. Михаил (23.11.2009 / 21:22)
#2, это для командной строки?

5. Александр (23.11.2009 / 21:24)
4, да, под nix*

6. Михаил (23.11.2009 / 21:33)
#3, проблема в том, что процесс не блокирует файл и flock($fp, LOCK_EX) всегда возвращает true

7. Александр (23.11.2009 / 21:36)
6, какая ось?

8. Михаил (23.11.2009 / 21:38)
windows7

9. Александр (23.11.2009 / 21:51)
Страшный способ v2.0
<?php	if(rename('tmp_file.txt', 'my_file.txt'))
	{ 
	echo 'Не используется!!';
	rename('my_file.txt','tmp_file.txt');
	 }else{
	 echo 'Файл занят!!!';
	 }
Наверняка сработает

10. Михаил (23.11.2009 / 22:06)
Не сработал. Я ж говорю файл не блокируется, любой другой процесс может делать с ним что угодно

11. Александр (23.11.2009 / 22:11)
10, что за процесс если не секрет?

12. Михаил (23.11.2009 / 22:20)
ffmpeg перекодирует видео из avi в 3gp

13. Михаил (23.11.2009 / 22:36)
Чуть изменил скрипт, теперь rename работает. Но это какое-то извращение, ведь если кто-то будет качать файл, а в это время скрипт будет переименовывать его, то у пользователя, скачивающего файл загрузка может оборваться

14. Александр (23.11.2009 / 22:41)
13, а с flock не пашет?

15. Михаил (23.11.2009 / 22:50)
Не пашет. Нужно, наверное это всё в linux попробовать

URL: https://visavi.net/topics/3202