Ответ 1
Вы можете использовать setmode(fileno(stdout), O_BINARY)
Оберните его в ifdef, если вы хотите, чтобы он был совместим с Linux.
Смотрите также: https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/setmode?view=vs-2017
Я пытаюсь найти лучший способ записать двоичные данные в stdout из программы C. Он отлично работает в Linux, но у меня возникают проблемы при компиляции в Windows, потому что "\n" преобразуется в "\ r\n".
Есть ли стандартный способ записи в stdout в каком-то двоичном режиме, который позволяет избежать преобразования новой строки? Если нет, то какой самый простой способ заставить Windows прекратить это делать?
Я использую GCC и MinGW.
Вы можете использовать setmode(fileno(stdout), O_BINARY)
Оберните его в ifdef, если вы хотите, чтобы он был совместим с Linux.
Смотрите также: https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/setmode?view=vs-2017
Вы можете сделать что-то вроде этого (это своего рода кросс-платформа):
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
.