c - 使终端输入在一定数量的字符后发送

标签 c linux input terminal

我正在使用 C 创建一个 Linux 终端程序。

我正在尝试使一个两位数的代码地址成为一个数组位置。 我不想在每输入两个数字后就必须按回车键,我希望在输入 to 个字符后直接通过 scanf 将输入发送到我的缓冲区变量。

我没有代码示例,因为我不知道如何处理它。

感谢您的帮助!

最佳答案

您有两种选择,它们以几乎相同的方式解决了相同的问题。第一种是在运行程序时使用 stdbuf;调用是:

 stdbuf -i0 ./a.out

使用它可以防止 stdin 被行缓冲,并允许您使用 fread() 或类似的命令来检索输入。

另一种是将终端置于原始 模式。描述得很好here .但缺点是不再处理控制字符。在你的程序中,你

#include <termios.h> 

main(){
    struct termios trm;

    tcgetattr(STDIN_FILENO, &trm); /* get the current settings */
    trm.c_cc[VMIN] = 1;     /* return after 1 byte read; you might make this a 2*/
    trm.c_cc[VTIME] = 0;    /* block forever until 1 byte is read */
    tcsetattr(STDIN_FILENO, TCSANOW, &trm); 
}

关于c - 使终端输入在一定数量的字符后发送,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9186036/

相关文章:

c - 运行 fork 并打印 hello

linux - 使用 Unix TC 整形高带宽流量

linux - 浮点异常 - 整数之间的除法

Ubuntu 中的 C++ 手册页

c# - 输入只存储两个值?

c - "Pointer being freed was not allocated"发生在 mac 但不是在 windows 7

c++ - Eclipse CDT 显示一些错误,但项目已成功构建

c++ - 使用键盘输入的简单方法?

c++ - 为什么 gmtime 和 localtime 给我相同的结果?

c++ - 为什么 std::getline() 在格式化提取后跳过输入?