为什么空的 printf 允许我继续从标准输入读取数据?
Why does an empty printf allow me to continue reading data from the stdin?
代码
while (1)
{
keycode = key_hook();
if (keycode == SPACE || keycode == BKSPACE)
{
render_again = 1;
}
if (keycode == ESC)
break;
if (render_again)
{
render_again = 0;
render(all);
}
dprintf(1, ""); //I have no idea why this prevents the program from freezing
}
int key_hook()
{
char buffer[4];
read(0, buffer, 4);
return (*(unsigned int *)buffer);
}
好的,这段代码处理屏幕上文本的重绘。一些文本行使用 termcaps (tputs(tgetstr("us, NULL")......)
加下划线或突出显示。一切都打印正常,但在第一次重绘文本后,while 显然冻结了,除非存在 dprintf/printf
。 key_hook
函数只是从 stdin
中读取 4 bytes
并将它们转换为 int
.
当我上次在这里工作时,我的 key_hook 版本有一个单字节读取循环。这被 1 秒的警报和到目前为止的数据是否是键前缀的逻辑打破了。
报警中断读取,停止冻结
代码
while (1)
{
keycode = key_hook();
if (keycode == SPACE || keycode == BKSPACE)
{
render_again = 1;
}
if (keycode == ESC)
break;
if (render_again)
{
render_again = 0;
render(all);
}
dprintf(1, ""); //I have no idea why this prevents the program from freezing
}
int key_hook()
{
char buffer[4];
read(0, buffer, 4);
return (*(unsigned int *)buffer);
}
好的,这段代码处理屏幕上文本的重绘。一些文本行使用 termcaps (tputs(tgetstr("us, NULL")......)
加下划线或突出显示。一切都打印正常,但在第一次重绘文本后,while 显然冻结了,除非存在 dprintf/printf
。 key_hook
函数只是从 stdin
中读取 4 bytes
并将它们转换为 int
.
当我上次在这里工作时,我的 key_hook 版本有一个单字节读取循环。这被 1 秒的警报和到目前为止的数据是否是键前缀的逻辑打破了。
报警中断读取,停止冻结