Как написать массив символов в стандартный вывод без буферов?

Как написать char[LENGTH] data прямо к stdout или в файл, не имея printf, puts, putcharи т. д. или любая другая функция io, копирующая содержимое из data в свой внутренний буфер?

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

Я ищу решение, подобное write(destination, buffer, size)Я хотел бы, чтобы это было портативное решение.

Вот некоторые события, которые я сделал:

// Experience 1
#include <cstdio>

int main() {

  constexpr int const LENGTH = 2 * 1024;
  char data[LENGTH];
  std::printf(data); // data gets copied to stdout buffer
  std::fflush(stdout); // I'd like something like std::flush(data)

  return 0;
}

// Experience 2
#include <cstdio>

int main() {

  constexpr int const LENGTH = 2 * 1024;
  char data[LENGTH] = "Hello, world!";
  std::setvbuf(stdout, data, _IOFBF, LENGTH);

  // Expected it to print 'Hello, world!' but nothing happens
  // I suspect it has something to do with the "end" pointer.
  std::fflush(stdout);

  // stdout-> on visual studio it only gives me a void pointer called _Placeholder.
  // No way to directly change the FILE struct /
  // advancing the "end" pointer without writing to the buffer. 

  return 0;
}

После прочтения исходного кода fflushЯ нахожу звонки write а также _writeпредположительно системные вызовы. Я подозреваю, что на Windows, fflush может быть использовать какой-то вызов Api.

Даже при том, что должен быть простой способ вывести символы на экран без буферов "посредников", какой-то оболочки, которая работает на всех ОС.

0 ответов

Другие вопросы по тегам