Это никогда не будет правдой:
if (getline (stream, logbuffer))
{
if (stream.eof())
{
/// will never get here
Если getline()
сработало, поток не может быть в состоянии eof. Тесты eof()
и связанные состояния работают только с результатами предыдущей операции чтения, такой как getline()
- они не предсказывают, что будет делать следующее чтение.
Насколько я знаю, нет способа делать то, что вы хотите. Однако, если другой процесс записывает строку за раз, проблемы, которые, по вашему мнению, вы испытываете, должны быть очень редкими (по моему опыту отсутствуют), в некоторой степени зависящими от используемой вами ОС. Я подозреваю, что проблема кроется в другом месте, возможно, в вашем коде. Хвост файла является очень распространенной вещью, и обычно для этого не нужно прибегать к специальному коду.
Однако, если вам нужно прочитать частичные строки, основной алгоритм выглядит следующим образом:
forever do
wait for file change
read all possible input using read or readsome (not getline)
chop input into lines and possible partial line
process as required
end