Cygwin считывает входные данные, поступающие из tail -f

Используя Cygwin в Windows, я хотел иметь звуковое уведомление о конкретных сообщениях в журнале сервера. Я написал следующее:

#include <stdio.h>
#include <stdlib.h>

int main() {
    FILE *f = fopen("/dev/stdin", "r");
    char bar=' ';
    if(f==NULL) {
        return 1;
    }
    do {
        bar = fgetc(f);
        if((bar=='\n') || (bar=='\r')) {
            printf("\a");
        }
        if(bar!=EOF) {
            printf("%c", bar);
        }
    } while(bar!=EOF);
    fclose(f);
    printf("Done.\n");
    return 0;
}

Затем я выполнил следующую команду:

tail -f serverlog | grep myMessage | ./alerty.exe

Иногда я получаю уведомления, а иногда нет.

У меня двоякие вопросы: 1) Что в моей программе на C не так? Почему я не могу постоянно читать вводимые данные? Это возбудило мое любопытство, поэтому я отчаянно хочу это узнать.

2) Как мне достичь первоначальной цели - заставить мою систему издавать звуковой сигнал, когда в файле появляется конкретный текст?

6
задан Ishpeck 4 February 2011 в 19:37
поделиться