您的位置:首页 > 运维架构 > Linux

linux-0.11调试教程,readline ()函数中,ECHO的关闭和开启

2013-02-28 06:51 489 查看
/* Read a line of input.  Prompt with PROMPT.  A NULL PROMPT means

   none.  A return value of NULL means that EOF was encountered. */

char *

readline (prompt)

     char *prompt;

{

  char *readline_internal ();

  char *value;

  rl_prompt = prompt;

  /* If we are at EOF return a NULL string. */

  if (rl_pending_input == EOF)

    {

      rl_pending_input = 0;

      return ((char *)NULL);

    }

  rl_initialize ();

  rl_prep_terminal ();

#if defined (HANDLE_SIGNALS)

  rl_set_signals ();

#endif

  value = readline_internal ();

  rl_deprep_terminal ();

#if defined (HANDLE_SIGNALS)

  rl_clear_signals ();

#endif

  return (value);

}

readline ()函数中,rl_prep_terminal ()函数之前一般ECHO标志是开启的,既你按下字符键,会调用con_write()函数回显,但是这里rl_prep_terminal
()函数的作用要关闭ECHO标志,其他代码接管显示的任务:

第一用read()函数读取,然后再经过一些重要的处理,比如把字符的值放入the_line[]数组,等等。

然后交给write()函数,从而进入sys_write()函数显示。

可见ECHO的关闭是必须而重要的一环,是个前提。

如果不关闭ECHO,按下字符a内核会调用con_write()显示一次,而bash中的readline()会调用sys_write()从而调用con_write()再显示一次。

rl_prep_terminal ()函数关闭ECHO,rl_deprep_terminal()函数恢复还原原来的状态。

如果你调用stty命令会看见ECHO是开启的,就是因为rl_deprep_terminal()函数恢复还原原来的状态。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: