хотел бы тут программу написать, точнее парсер логов на C, перла не знаю, так бы на нём писал, короче как при появлении новой строки в файле передавать эту новую строку в функцию для обработки?
Можно предложить писать логи не в файл, а в именованный пайп (или не только в файл, а еще и в пайп). Чтение из него будет происходить простым и незатейливым способом, блокируясь при отсутствии новых данных.
Отвечая на поставленный вопрос.
while (!feof(fp) && (ch = getc(fp)) != EOF)
if (putchar(ch) == EOF)
oerr();
if (ferror(fp)) {
ierr();
return;
}
(void)fflush(stdout);
if (!fflag)
break;
sleep(1);
clearerr(fp);
if (stat(fname, &nsb) != 0)
continue;
/* Reopen file if the inode changes or file was truncated */
/* и дальше все по новой */
fflag как раз отвечает за -f.
Короче говоря, дочитали до конца, заснули, если изменился размер, то сбросили флаг ошибки и стали читать дальше.