Очистить буфер на fread () из fifo в C? - PullRequest
0 голосов
/ 29 мая 2019

Я читаю непрерывные данные (строки текста / строки) из FIFO с использованием функции C fread().Теперь я заметил, что мой процесс становится все больше и больше в оперативной памяти.Можно ли как-то очистить буфер дескриптора fopen()?Я могу обойти мой процесс от роста, если я сделаю fclose() и последующие fopen() после каждой прочитанной строки, но действительно ли это решение?

int main() {
    unsigned char buffer[1];

    instream=fopen("/path/to/fifo", "r");
    if (instream!=NULL) {
        while (fread(&buffer, 1, 1, instream)==1) {
            // ...
        }
    }
    else {
        // error handling...
    }

    return 0;
}

Это работает, но кажется уродливым и подверженным ошибкам?

int main() {
    unsigned char buffer[1];

    instream=fopen("/path/to/fifo", "r");
    if (instream!=NULL) {
        while (fread(&buffer, 1, 1, instream)==1) {
            // ...

        if (buffer[0] == '\n') {
            fclose(instream);
            instream=fopen("/path/to/fifo", "r");
        }
    }
    else {
        // error handling...
    }

    return 0;
}

Еще один вопрос: есть ли риск, что моя программа читает быстрее, чем вывод другой программы, которая пишет в fifo, и поэтому fread(...) будет 0 и while -цикл закончится?

...