关于原始与熟食终端模式的混淆?

the*_*n85 5 c io terminal

我目前有一个chat client与之成功通信的人a server.我应该修改行为,以便在收到另一条聊天消息时提示向下移动(即通过打印" \b擦除提示",打印消息,然后重新打印提示,将消息打印在提示"上方" .

我们获得了一个test client并且test server用于测试此功能,并且当前当用户有提示但没有输入任何内容时,他们可以接收来自其他用户的消息.当他们开始输入时,缓冲区不会刷新,直到他们输入整个消息并按Enter键.

我应该复制这种行为,但我对原始模式实际上是什么感到困惑.

任何人都可以告诉我如何通过原始模式控制输入/输出,或者为什么上面描述的测试程序的行为发生在使用原始模式?

小智 10

默认情况下,Unix风格的tty(即控制台)驱动程序将以"熟化模式"输入.在此模式下,它提供了一定量的命令行编辑.用户可以输入一行输入,可能删除并重新输入其中的一些(但这并不总是有效),程序在用户点击输入之前不会看到它.

这可能追溯到通过串行线连接到计算机的硬件终端的日子; 如果终端处理一些低级编辑,计算机不必.它还为普通的C程序提供了一些免费的基本输入编辑.

相反,原始模式设置TTY驱动程序以在键入时将每个字符传递给程序.程序(在Unixish操作系统上)默认以煮熟模式启动,需要启用原始模式.

如何做到这一点过去常常在操作系统之间变化很大,尽管POSIX最近标准化了这些东西.在Linux上,您可以阅读文档的"termios"和"tty_ioctl"手册页.基本上,您将获得包含tty设置的数据结构,修改您关注的部分(特别是启用原始模式),然后将其传回.

另一种可能性是使用ncurses库.它为你抽象出所有这些东西.


Ben*_*ebe 7

在原始模式下,字符直接传递到您的程序。例如,当您在“cooked”模式下在终端中键入时,您键入的字符会立即回显在屏幕上。在原始模式下,终端会忽略字符(即不回显),并且您的程序可以选择是否回显它。

编辑:维基百科有一篇关于煮熟模式的好文章。http://en.wikipedia.com/wiki/Cooked_Mode 另外,请注意,在原始模式下,偶数和相似的字符将直接传递给您的程序。