答案1
重击做过从标准输入 (stdin)(即终端)获取输入。
终端可以是以下两个之一模式:生的或者煮熟的(也称为“字符模式”和“行模式”,术语“raw”和“cooked”主要在 Unix 世界中使用)(“cooked”一词是作为双关语引入的,与“raw”相对) )。在原始模式下,终端立即将输入传输到应用程序。在cooked模式下,终端读取整行并提供(非常原始的)行编辑机制,并且仅当用户按下 时才将数据传输到应用程序Enter。
终端以煮熟模式启动。想要更多地控制输入的应用程序(例如 bash),在等待用户键入命令时将终端设置为原始模式。
答案2
我相信终端缓冲通过键盘接收到的每一行文本,这样任何具有附加到终端设备文件的文件描述符(即 fd0)的程序都不会看到该行中的任何文本,直到终端“发送”它- 当您按下 时会发生这种情况 Enter。
(shell 的行编辑器如何解决这个问题 - 我不确定,但他们肯定会在您点击之前获取文本Enter)
此外,当 shell 启动子进程(在本例中ping
)时,它会在子进程运行时进入挂起/ wait
ing 状态,因此即使终端没有保留其中的文本,shell 也会忽略它,假设它是用于子进程。
所以你在屏幕上看到的文字是因为终端正在显示它,但没有程序捕获它并对其执行任何操作,直到子进程退出 - 并且 shell“唤醒” - 然后文本被发送到 shell 行编辑器。虽然我认为不一定所有终端去做。