мониторинг изменений файла в ракетке (например, tail -f) - PullRequest
1 голос
/ 09 ноября 2011

Я хотел бы реализовать поведение типа tail -f в Racket.То есть я хотел бы прочитать из файла, и когда я достигну конца, смогу создать что-то вроде «блокировки» (read-line file), которое будет возвращаться, когда какой-то другой процесс добавляет строку в файл ,Я попытался выполнить синхронизацию с (read-line-evt file), но, если я нахожусь в конце file , вместо блокировки до тех пор, пока не будут доступны другие данные, он немедленно возвращается.Есть ли способ сделать это?

1 Ответ

2 голосов
/ 09 ноября 2011

Не думаю, что у вас есть способ избежать опроса файла.

Обратите внимание, что все входные функции Racket учитывают eof значение, которое должно быть возвращено, когда оно достигает конца входного потока - поэтому все события немедленно возвращают его, когда достигнут конец. По крайней мере, я не вижу ничего похожего на «подождите, пока какой-то ввод готов, а не eof».

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

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