【问题标题】:C read stdin buffer before it is submitC在提交之前读取stdin缓冲区
【发布时间】:2011-10-22 21:54:47
【问题描述】:

这种情况很可能是不可能的,因为我在任何地方都没有发现这种行为,但我很好奇是否有人有任何技巧来完成这样的事情。是否可以在用户实际敲击回车提交数据之前确定程序的标准输入缓冲区的内容?

我正在尝试这样做,因为我已经构建了一个简单的终端聊天程序,它可以将消息从一个终端发送到另一个终端以便于通信。我们遇到的问题是,由于传入消息和传出消息一起出现在终端中,如果用户在从另一端接收到消息时正在键入消息,它会扭曲显示并将键入的消息附加到新的末尾收到的消息。如果有办法检查缓冲区的内容并采取相应措施会很方便,但我不确定如果没有 gui 类型的接口级别,这是否可能。

【问题讨论】:

  • 您的问题不是关于标准输入,而是关于阅读 tty。这是两个非常不同的事情。查看 ncurses。
  • 感谢您的澄清,这确实是我想要做的,我会检查 ncurses 功能。
  • 稍微扩展一下威廉的评论:c 该语言没有缓冲输入的概念,标准库也没有。因此,如何处理可能缓冲的输入取决于提供给您的系统。

标签: c buffer stdin


【解决方案1】:

在此页面上搜索“kbhit.c”:http://pwilson.net/sample.html

【讨论】:

  • 谢谢,这看起来也很棒,应该对我有用。
  • 那是完全可怕的代码。两个突出的直接错误:(1)使用错误的返回类型(unsigned char 而不是int)强制“无字符”和空字符共享相同的值,从而无法检测到 Ctrl-@ /Ctrl-空格键,以及 (2) 函数的“等待”版本使用 usleep 而不是使用 select/poll 或阻塞模式进入 CPU 占用重试循环。
猜你喜欢
  • 1970-01-01
  • 2017-02-14
  • 1970-01-01
  • 2012-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-02
相关资源
最近更新 更多