Можно написать большой блок текста в stdout все сразу.Мгновенный буфер записи в stdout
Например, я получаю текстовый файл 50 КБ и помещаю его в файл story.txt. Мне любопытно, могу ли я сбросить содержимое этого файла в stdout без того, чтобы пользователь заметил, что какой-то текст медленно входит. В один момент нет текста, затем весь буфер заливается в stdout.
Я пытался сделать это со следующим кодом, но независимо от того, какой режим буферизации я установил, он не смог написать файл сразу, только по частям.
/* dumps a lot of text at once */
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <string.h>
char story[100000];
char buffer[100000];
int main(int argc, char **argv)
{
FILE *handle = fopen("coolstory.txt", "r");
size_t n = fread(&story[0], 1, 100000, handle);
fclose(handle);
/* try to flush all at once... */
fclose(stdout);
freopen("/dev/tty", "w", stdout);
setvbuf(stdout, &buffer[0], _IOFBF, 100000);
fwrite(story, n, 1, stdout);
fflush(stdout);
printf("\nread %u bytes.\n", n);
return 0;
}
возобновлять часть была мне интересно, если setvbuf/вровень будет вести себя по-другому, если бы я назвал их сразу после того, как был открыт стандартный вывод. К сожалению, он ничего не сделал.
Я просто хочу знать, возможно ли, а если нет, то почему.
Консоль ввода-вывода, как правило, медленный *, потому что * он должен быть визуализирован и видим пользователю. Вы можете намного быстрее записывать в 'stdout', если он перенаправляется в файл. – EOF
Итак, stdout по дизайну должен выписывать каждый персонаж, когда он размывается? Кажется, что это иногда бывает в блоках, но, может быть, я ошибаюсь. – Dmitry
@Dmitry, попробуйте '$ cat/usr/include/stdio.h'. На моей машине это примерно 30KiB, и похоже, что он заканчивается в ~ 5 кадрах на 144 Гц. Я не думаю, что у вас будет много проблем с 50KiB. –