Как написать массив символов в стандартный вывод без буферов?
Как написать 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.
Даже при том, что должен быть простой способ вывести символы на экран без буферов "посредников", какой-то оболочки, которая работает на всех ОС.