Это не совсем стандартный C:
size(file);
Вызовите stat () для получения информации о файле - тип организации файла, размер файла и разрешения.
Что ваш код делает, так это в конечном итоге устанавливает указатель файла в конец файла, когда он пытается его прочитать. Вместо этого рассмотрите stat () (или fstat () для открытого файла).
rewind () сбрасывает указатель файла на начало файла, fseek () помещает его в любое место.
tail -f неоднократно пытается файл в точке EOF с коротким перерывом между попытками .... Он не считает EOF ошибкой. Он запоминает текущее смещение файла для EOF, затем fseeks () с помощью SEEK_END, затем вызывает ftell () и сравнивает смещения. Если есть разница, то fseek () возвращается к последней известной конечной точке и считывает данные.
Это описание из старого источника Unix. Я уверен, что с тех пор его подправили.