Каков самый простой способ записи в stdout в двоичном режиме?

Я пытаюсь найти лучший способ записать двоичные данные в stdout из программы C. Он отлично работает в Linux, но у меня возникают проблемы при компиляции в Windows, потому что "\n" преобразуется в "\ r\n".

Есть ли стандартный способ записи в stdout в каком-то двоичном режиме, который позволяет избежать преобразования новой строки? Если нет, то какой самый простой способ заставить Windows прекратить это делать?

Я использую GCC и MinGW.

Ответ 2

Вы можете сделать что-то вроде этого (это своего рода кросс-платформа):

FILE *const in = fdopen(dup(fileno(stdin)), "rb");
FILE *const out = fdopen(dup(fileno(stdout)), "wb");
/* ... */
fclose(in);
fclose(out);

Или вы можете использовать системные вызовы write() и read() непосредственно с помощью fileno(stdin) и fileno(stdout). Эти системные вызовы работают на более низком уровне и не делают никаких преобразований. Но у них также нет буферизации, которую вы получаете из потоков FILE.