如何解决linux中的tty如何获取输入并传递到程序中以及如何获取它?
比方说,我有一个具有以下循环的C程序。
while ((c = getchar()) != EOF) {
...
}
此循环似乎是在tty上键入字符时一个接一个地读取它们。但是,一旦输入了字符,我就不能更改它们,显然,这不会发生。
这必须意味着tty必须保留一些缓冲区以保留它已接收但尚未推送到stdin的值。一旦进入标准输入,就会一一读取字符。
这是正确的吗?如果是这样,我如何才能在此缓冲区中获取字符,而不必去标准输入?我尝试将ioctl与FIONREAD一起使用,但似乎不起作用(即使终端中有字符,缓冲区的大小也始终为零),并且由于此数据不在stdin中,因此这意味着可以从stdin中读取数据不起作用(这些是对类似问题的解答)
解决方法
简短答案:
termios.h
是POSIX标准的头文件,可以让tty进入原始模式,而通常处于煮熟模式。
建议阅读其文档/手册页。
一个通过termios.h
设置原始模式的分步网页被链接到here。
说明:
默认情况下,终端的I / O是行缓冲的,即,确保在行终止时刷新输入/将其发送到您的程序。
在输出中,这是通过\n
或fflush(stdout);
进行的,而在输入中,这是通过用户按下[ENTER]
的键来实现的。
使终端进入 raw 模式,这样一来,只要按下一个键,输入信号就会发送到您的程序中,同时还会提供许多其他默认功能,例如回显禁用。
这对于任何稍微复杂的CLI程序都是很常见的,尤其是像vim,htop等之类的东西。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。