【问题标题】:How set dynamic size for input queue on Solaris?如何在 Solaris 上设置输入队列的动态大小?
【发布时间】:2013-11-30 17:18:48
【问题描述】:

我通过 fgets 从终端读取,缓冲区大小为 80 字节。但是当我在终端中写很长的行(超过limits.h中的MAX_INPUT常数)时,终端会响起BEL声音(IMAXBEL已启用)。如何在终端中输入这么长的行?我不能强迫用户输入特殊符号。我只能重写程序。

我尝试使用#undef MAX_INPUT - 这不起作用。 如果我禁用 IMAXBEL,那么终端只会在输入的 MAX_INPUT 字节之后清除输入队列,并将输入的下一个字节保存在队列的开头...并一直执行此操作直到用户输入结束。

【问题讨论】:

    标签: c unix terminal solaris


    【解决方案1】:

    如果您使用文件管道输入长输入,它是否有效:

    ./myprog < input_file
    

    可能与终端实现有关。在这种情况下,使用来自文件的输入是更好的选择(尽管更好的选择可能是重新实现输入逻辑以允许多行输入)

    【讨论】:

    • 输入逻辑允许多行输入,但也需要允许很长的行。由于目标要求不允许,我不能限制用户仅从文件输入。
    • 那么最便携的解决方案是使用文件来避免任何 tty 限制
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-11
    • 1970-01-01
    相关资源
    最近更新 更多