【问题标题】:Delete current terminal input line删除当前终端输入行
【发布时间】:2020-05-02 02:42:02
【问题描述】:

我正在尝试在 linux 上用 C 编写一个小控制台聊天程序。

到目前为止,我的编码方式是两个聊天伙伴只能交替发送/接收,因为这些函数调用默认是阻塞的。

现在我想修改那个程序,使两者能够同时发送和接收。

我发现的问题是,一旦你向终端输入了一些输入,我不知道如何输出接收到的消息,而不会弄乱终端的当前输入行。

如果有办法删除当前输入行,您可以暂时保存该行,打印新消息并将输入行放回原处。

但是,我无法在互联网上找到解决此问题的方法。

是否可以删除当前输入行,如果没有,我还能如何实现我想要的?

【问题讨论】:

  • 你有没有试过查看terminal escapes
  • 认为这是 ncurses 所做的事情,但我自己从未使用过它,我无法确定。
  • @Zelnes 谢谢,这正是我想要的

标签: c terminal chat stdout stdin


【解决方案1】:

我认为您应该像 Edd 在评论中所说的那样研究 ncurses。 它可以让您轻松管理终端窗口中的内容,这对于您的聊天程序来说听起来是个好主意。 您需要做的就是将您的消息存储在 2 个字符数组中:

char incoming[MSG_MAX]

char outgoing[MSG_MAX]

然后,您可以在终端窗口中的任意位置输出这些消息,因为 ncurses 允许您在放置文本的位置指定 x,y 坐标。 然后,一个简单的 ncurses erase() 系列函数的包装器将允许您从终端窗口中指定的 x,y 坐标中删除字符。

编辑:MSG_MAX 不是真正的 ncurses 宏。

【讨论】:

    猜你喜欢
    • 2012-03-29
    • 2013-02-04
    • 2021-02-26
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多