raw terminal mode - how to take in input?

前端 未结 2 764
甜味超标
甜味超标 2021-01-21 04:55

I have a chat client that takes in input in raw terminal mode, but I don\'t know about handling input in this mode. I need to know 2 things:

  • How can I read the inp
2条回答
  •  没有蜡笔的小新
    2021-01-21 05:04

    I recommend the GNU readline library for this. It takes care of the tedious work of getting lines of input, and allows the user to edit his line with backspace, left and right arrows, etc, and to recall older command using the up arrow and even search for older command using ^R, etc. Readline comes installed with typical unix-like distributions like linux, but if you don't have it, you can find it here

    Edit: Here is a minimal readline example:

    #include 
    #include 
    #include 
    
    int main(int argc, char ** argv)
    {
        while(1)
        {
            char * line = readline("> ");
            if(!line) break;
            if(*line) add_history(line);
            /* Do something with the line here */
        }
    }
    

    Compile with gcc -o test test.c -lreadline -lncurses.

    If you can't use readline, getline is an alternative:

    #include 
    int main()
    {
        char * line = NULL;
        size_t len;
        while(getline(&line, &len, stdin) >= 0)
           printf("I got: %s", line);
    }
    

    If even getline is unacceptable, you can use fgets. It will not dynamically allocate a buffer of suitable size, so too long lines will be truncated. But at least it is standard C:

    #include 
    int main()
    {
        char buf[1000];
        while(fgets(buf, sizeof(buf), stdin)
            printf("I got: %s, line);      
    }
    

提交回复
热议问题