3

Я написал программу на C и скомпилировал ее с использованием MinGW. Когда я пытаюсь запустить эту программу в Cygwin, она, кажется, ведет себя нормально (то есть выводит правильный вывод и т.д.)

Тем не менее, я пытаюсь передать вывод в программу, чтобы я мог проанализировать информацию из вывода программы. Тем не менее, кажется, что трубопровод не работает, потому что я не получаю никакой информации во второй программе.

Я подтвердил это с помощью следующих команд:

Эта команда работает нормально:

./prog 

Выполнение этой команды ничего не возвращает:

./prog | cat

Эта команда проверяет первое:

./prog | wc

Который возвращает:

0 0 0

Я знаю, что сценарий (включая трубопровод из программы) прекрасно работает в любой среде Linux.

Кто-нибудь знает, почему трубопровод не работает в Cygwin? Спасибо!

1 ответ1

0

Скорее всего, это связано с буферизацией stdio, как было указано и объяснено ранее в разделе комментариев. В моих проектах MinGW я часто использовал следующую конструкцию:

#define disable_stdout_buffering() do { \
               setvbuf(stdout, NULL, _IONBF, 0); } while(0)

int main(int argc, char *argv[]) {
    disable_stdout_buffering();
    /* Your code */
    exit(EXIT_SUCCESS);
}

Конечно, вы также можете добавить вызов fflush() в макросе препроцессора или когда вы выводите свои данные в stdout, однако таким образом он не добавляет дополнительный вызов библиотеки для каждого буфера, записанного в вашу консоль.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .