Как я могу проверить, открыт ли сейчас файл csv и записывается ли в него - файл, а не дескриптор файла - с помощью Perl? - PullRequest
1 голос
/ 25 мая 2010

У меня есть система Clipper, записывающая CSV-файлы в каталог Windows. У меня есть скрипт Perl, работающий на сервере Linux, который читает монтирование этого каталога Windows и импортирует файлы в базу данных.

Сейчас мы используем файлы флагов, чтобы указать, когда csv больше не записывается; файл флага записывается после завершения csv. Я действительно предпочел бы просто получить то, что мне нужно, от самого csv, но я не могу найти способ определить, когда файл открыт и записывается.

lsof не отвечает моим потребностям. Я попытался использовать flock и открыть файл с эксклюзивной блокировкой, думая, что это может вызвать ошибку, если файл изменяется, но это не так.

Есть мысли?

Ответы [ 4 ]

0 голосов
/ 12 января 2012

Что-то похожее на Linux :: Inotify2 или File :: Monitor поможет при мониторинге файлов.

0 голосов
/ 25 мая 2010

Может не работать, так как вы подключаетесь к Windows, но, возможно, inotify поможет.

0 голосов
/ 25 мая 2010

Если inotify не работает, используйте опрос бедного человека: если время модификации превышает две секунды, файл завершает запись.

0 голосов
/ 25 мая 2010

Согласно справочной странице Линукса для стада:

flock () не блокирует файлы через NFS. Вместо этого используйте fcntl (2): это работает по NFS, учитывая достаточно недавний версия Linux и сервер который поддерживает блокировку.

Вы пытались использовать fcntl ()? Гугл Я нашел несколько примеров людей, использующих fcntl с CIFS.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...