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()函数恢复还原原来的状态。
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()函数恢复还原原来的状态。
相关文章推荐
- linux-0.11调试教程,update_line()函数中按下退格键时对应的缓冲区
- linux-0.11调试教程,fflush()函数实现分析和FILE类型定义
- linux-0.11调试教程,update_line()函数中的按下字符键对应的缓冲区
- linux-0.11调试教程,update_line()函数分析,和update_line()函数的数据模型
- linux-0.11调试教程,rl_dispatch ()函数调用函数的参数的个数
- linux-0.11调试教程,bash-1.12中readline()调用过程
- linux-0.11调试教程,move_cursor_relative()函数和变量last_c_pos和变量c_pos的关系
- linux-0.11调试教程,终端的初始化init_terminal_io ()函数分析
- linux-0.11调试教程,task2的参数,copy_strings()函数和create_tables()函数的关系
- linux-0.11调试教程,bash-1.12源代码分析readline.a和termcap.a的连接
- linux-0.11调试教程,fwrite ()函数的作用
- linux-0.11调试教程,readline()回显字符调用顺序
- linux-0.11调试教程,filetutils的版本号
- linux-0.11调试教程,mkfs.c源代码分析(1)
- linux-0.11调试教程,系统调用sys_write的调用过程
- linux-0.11调试教程,con_init函数和右上角的EGAc
- linux-0.11调试教程,写了个readizone for linux-0.11 by chenghao0511
- linux-0.11调试教程 文件系统中b_uptodate字段的含义
- linux-0.11调试教程,findipn根据i节点号返回路径和文件名
- linux-0.11调试教程 tty_table