LINUX.ORG.RU

как узнать открыт ли файл?


0

0

стоит такая задача - мониторить некую папку на предмет появления каких-то файлов и потом их обрабатывать ...

и получается такая проблема ... в эту папка файлы попадают по ФТП и... как узнать докачан ли файл уже или еще в процессе?


>некую папку на предмет появления каких-то файлов

не папку, а директорию. папки только на рабочем столе, это абстракция директорий для домохозяек.
см. /usr/src/linux/Documentation/dnotify.txt

anonymous
()
Ответ на: комментарий от anonymous

именно с помощью dnotify это и мониторится ... насчет "папки" - как хочу так и называю - мне так больше нравится

и вообще-то вопрос был совсем про другое

theli
() автор топика
Ответ на: комментарий от theli

посмотри исходники или сделай strace

cvv ★★★★★
()
Ответ на: комментарий от theli

>и вообще-то вопрос был совсем про другое

Не совсем про другое. dnotify позволяет определить начало процесса без polling. Если хочешь определить окончание процесса, то придется бегать по /proc/pid/fd и смотреть не держит ли кто-то открытым этот файл.

Вообще, сама постановка задачи изначально не совсем корректная.

Во-первых, технически невозможно ждать на событии закрытия файла,
во-вторых, невозможно взять блокировку на директорию и будут возможны разные коллизии(например, файл удалили).

>насчет "папки" - как хочу так и называю - мне так больше нравится

Когда говоришь сам с собой, то - верно. Но с другими лучше употреблять общепринятую в соответствующей среде(в данном случае - недомохозяек) терминологию, чтобы тебя поняли.

anonymous
()
Ответ на: комментарий от anonymous

В качестве альтернативы можно попробовать бегать не по /proc/pid/fd, а пробовать периодически устанавливать fcntl/F_SETLEASE F_WRLOCK, но на это нужны определенные привилегии и еще ряд нюансов.

anonymous
()

Если даже файл не открыт, где гарантия что он закачан нормально? Как альтернатива - 1. Мониторить логи FTP сервера. 2. Внести изменения в код FTP сервера, чтобы он каким-то образом сообщал про upload вашей программе.

anonymous
()
Ответ на: комментарий от anonymous

У меня похожий робот работает,
только я его делал на perl.

Я брал время последней модификации файла и если оно отличается от текущего меньше, чем на 20 cek ставил timewait 10 cek и повторял сие действие.

А про недокаченные файлы, мне кажется, что ftp сервера поддерживают докачку, только в одну сторону, то есть на upload такой возможности нет.

arum ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.