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

时间:2012-02-08 00:07:59

标签: c linux input terminal

我正在使用C。

创建一个Linux终端程序

我正在尝试将两位数代码地址设为数组位置。 我不想在每两位输入后按Enter键,我希望输入只是在输入字符后直接通过scanf发送到我的缓冲区变量。

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

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

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

 stdbuf -i0 ./a.out

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

另一种方法是将终端设置为 raw 模式。这是很好描述的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); 
}