【问题标题】:Print character to stdin as read by read line将读取行读取的字符打印到标准输入
【发布时间】:2015-10-21 01:35:49
【问题描述】:

我想在读入时打印 readline 读取的每个字符。 目前,在完全读入后,我显然可以打印出所有内容。 这是针对正在编写的 shell 的。

【问题讨论】:

  • 函数调用readline是有原因的;这个原因是因为它允许用户在调用程序(无论是外壳程序还是任何其他交互式程序)看到每个字符之前输入一行文本并进行编辑。我认为您正在尝试使用错误的功能。您将需要类似“curses”的原始模式输入——可能不使用“curses”,因为它会占据整个屏幕,而您不希望它这样做。也就是说,Bash 设法解释信息。我没有检查它是否使用readline 库,但你可以看看。
  • 我需要将输入的内容回显到 shell 中。我很难做到这一点。它不必通过 readline,我只需要帮助来回应所有内容。我正在使用 readline 来实际读取命令。
  • 好的。您可以像我一样阅读 readline 库的手册。或者您可以等待知道答案的人来帮助您。我想得越多,Bash 中的制表符补全之类的事情表明 Bash 管理它。因此,您可以查看 Bash 源代码,看看它是否使用了 readline 库。如果是这样,您可以从库中查看他们使用的内容。如果没有,它可能会给你一些想法......

标签: c gnu readline


【解决方案1】:

readline() 是一个阻塞函数,等待一个完整的行。

只需在循环中使用 read() 即可。如果没有新字符 read() 将返回 0 并且如果存在一个字符,它将返回 1 (或者如果 n 个字符在 stdin 中自上次调用 read() 并且您提供了足够大的缓冲区)。 通常,标准输入会为其保留文件描述符 0,因此您的代码可能如下所示:

char buf[1];
int i;

while(1) {
   i = read(0, buf, 1);
   if (i>0)
    {
    // process character
    }
}

【讨论】:

    猜你喜欢
    • 2011-09-14
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多