Чтение из файла исключительно в TCL - PullRequest
0 голосов
/ 26 октября 2018

Мне нужно прочитать из файла отчета (простой текстовый файл отчета), но, возможно, файл все еще создается, поэтому мне нужно подождать. По сути, ждите и прочитайте из файла, когда все другие процессы, которые записывают в него, закончили - есть ли способ сделать это в TCL?

ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ: Процесс, который пишет файл отчета, является третьим лицом - я не контролирую его. Я начинаю чтение ближе к концу цикла отчетов, и запуск моих операций чтения контролируется родительским сторонним приложением, поэтому я не могу отложить чтение. Разве в TCL нет способа запросить, открыт ли файл или обновляется и т. Д.? И я могу подождать, пока этот статус очистится?

1 Ответ

0 голосов
/ 26 октября 2018

Если файл является локальным файлом, и вы работаете на платформе POSIX (например, Linux или macOS), тогда вы можете использовать lsof -t ( l i s t o pen f iles, t (в противном случае), чтобы найти, какие процессы открывают файл.

# A slightly weird way of calling because we ignore the errors
set thefile /path/to/thefile.data
set pids {}
catch {
    set pids [exec lsof -t $thefile]
}

Это установитpids к списку процессов (по идентификатору), которые имеют файл;если он у вас открыт, он будет включать текущий процесс!Вы можете или не можете заботиться об этом.

Имейте в виду: это дорогостоящая операция.Создание списка PID может занять несколько секунд.

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