进入原始模式(第二节)

进入原始模式

让我们尝试读取用户的按键输入。(你需要添加的代码行已高亮显示并用箭头标记。)

kilo.c

步骤 3:读取输入

#include <unistd.h>
int main() {
  char c;
  while (read(STDIN_FILENO, &c, 1) == 1);
  return 0;
}

♐︎ 可编译

read() 函数和 STDIN_FILENO 宏来自 <unistd.h> 头文件。我们使用 read() 函数从标准输入读取 1 个字节到变量 c 中,并持续进行此操作,直到没有更多字节可读。read() 函数返回其读取的字节数,当到达文件末尾时返回 0。

当你运行 ./kilo 时,你的终端会连接到标准输入,因此你在键盘上的输入会被读取到变量 c 中。不过,默认情况下,终端以规范模式(也称为 “熟” 模式)启动。在这种模式下,只有当用户按下回车键时,键盘输入才会被发送到你的程序。这对许多程序来说很有用:它允许用户输入一行文本,使用退格键修正错误,直到输入符合他们的要求,最后按下回车键将输入发送给程序。但对于像文本编辑器这类具有更复杂用户界面的程序而言,这种模式并不适用。我们希望在每次按键时就立即处理输入,以便能迅速做出响应。

我们需要的是原始模式。遗憾的是,没有简单的开关能将终端设置为原始模式。原始模式需要关闭终端中的许多标志位来实现,我们将在本章逐步完成这一操作。

要退出上述程序,按下 Ctrl - D 告知 read() 函数已到达文件末尾。或者,你也可以随时按下 Ctrl - C 向进程发送立即终止的信号。

扫描二维码关注微信公众号,回复密码,即可获取密码

阅读剩余
THE END