如何在C中放弃用户输入

时间:2018-07-24 04:22:24

标签: c system

我正在开发一个shell项目,需要编写一个(不是一个很完整的项目,但是仍然)。 我需要获取光标的位置,因为我正在进行行编辑,而我是这样进行的:

void    get_cursor_pos(t_coord *actualize, t_prompt *prompt)
{
    char    buf[50];
    int     loop;

    ft_flush(prompt);                 //my function to flush stdin and not confuse user input with what i' going to get here
    bzero(buf, 50);                   //clean the place where i'm going to get the data
    write(1, "\033[6n", 4);           //writing this escape character will send me the position of the cursor with syntax "[[y_position;x_position]R"
    read(1, buf, 49);                 //getting what was sent 
    actualize->y = ft_atol(&buf[2]);  //converting and stocking data for y coordinate
    loop = 2;
    while (buf[loop] != ';')          //going to the x coordinate place in the string
        loop++;
    actualize->x = ft_atol(&buf[loop + 1]); //getting x coordinate
}

我的终端设置为非规范模式。 就在刷新之前,我想使终端不读取用户输入,并稍后再将其设置为正常:如果用户在刷新和读取之间写入内容,则数据将被破坏! 您可能会说“ nah!不会发生”,但是,如果我不停地按“ enter”(输入),我会时不时地(有时每50次给出一次)获得新的齿龈,它就损坏了!

我在网上查找并发现了CREAD flag,但是它不起作用,我仍在阅读用户输入。

shell.c_cflag &= ~(CREAD);  //am i doing it the right way? btw i'm on Mac

我没有使用ncurse(有限制的学校项目)。 我的问题只有在我不停地按下'enter'时才会发生,所以我只是添加了一个条件来检查并且我的问题消失了,但是我觉得这样做不正确。 还有另一种方法吗?

感谢您的关注! (如果这个问题已经在互联网上回答了,很抱歉,我发誓我已经做了很多研究,但是我不排除没有使用好的关键字,所以如果您找到它,请给我您使用的关键字:-))

0 个答案:

没有答案