⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 65.html

📁 linux 0.11中文版 有注释
💻 HTML
📖 第 1 页 / 共 5 页
字号:
<a name='L179'>
<a name='L180'><i><font color='green'>//// 等待按键。</font></i>
<a name='L181'><i><font color='green'>// 如果控制台的读队列缓冲区空则让进程进入可中断的睡眠状态。</font></i>
<a name='L182'><b>void</b>
<a name='L183'><a href='../R/728.html' title='Multiple refered from 2 places.'>wait_for_keypress</a> (<b>void</b>)
<a name='L184'><font color='red'>{</font>
<a name='L185'>  <a href='../S/65.html#L153' title='Defined at 153 in kernel/chr_drv/tty_io.c.'>sleep_if_empty</a> (&amp;tty_table[0].secondary);
<a name='L186'><font color='red'>}</font>
<a name='L187'>
<a name='L188'><i><font color='green'>//// 复制成规范模式字符序列。</font></i>
<a name='L189'><i><font color='green'>// 将指定tty 终端队列缓冲区中的字符复制成规范(熟)模式字符并存放在辅助队列(规范模式队列)中。</font></i>
<a name='L190'><i><font color='green'>// 参数:tty - 指定终端的tty 结构。</font></i>
<a name='L191'><b>void</b>
<a name='L192'><a href='../R/413.html' title='Multiple refered from 3 places.'>copy_to_cooked</a> (<b>struct</b> tty_struct *tty)
<a name='L193'><font color='red'>{</font>
<a name='L194'>  <b>signed</b> <b>char</b> c;
<a name='L195'>
<a name='L196'><i><font color='green'>// 如果tty 的读队列缓冲区不空并且辅助队列缓冲区为空,则循环执行下列代码。</font></i>
<a name='L197'>  <b>while</b> (!<a href='../S/38.html#L39' title='Defined at 39 in include/linux/tty.h.'>EMPTY</a> (<a href='../S/7.html#L44' title='Defined at 44 in fs/char_dev.c.'>tty</a>-&gt;read_q) &amp;&amp; !<a href='../S/38.html#L45' title='Defined at 45 in include/linux/tty.h.'>FULL</a> (<a href='../S/7.html#L44' title='Defined at 44 in fs/char_dev.c.'>tty</a>-&gt;secondary))
<a name='L198'>    <font color='red'>{</font>
<a name='L199'><i><font color='green'>// 从队列尾处取一字符到c,并前移尾指针。</font></i>
<a name='L200'>      <a href='../S/38.html#L49' title='Defined at 49 in include/linux/tty.h.'>GETCH</a> (<a href='../S/7.html#L44' title='Defined at 44 in fs/char_dev.c.'>tty</a>-&gt;read_q, c);
<a name='L201'><i><font color='green'>// 下面对输入字符,利用输入模式标志集进行处理。</font></i>
<a name='L202'><i><font color='green'>// 如果该字符是回车符CR(13),则:若回车转换行标志CRNL 置位则将该字符转换为换行符NL(10);</font></i>
<a name='L203'><i><font color='green'>// 否则若忽略回车标志NOCR 置位,则忽略该字符,继续处理其它字符。</font></i>
<a name='L204'>      <b>if</b> (c == 13)
<a name='L205'>        <b>if</b> (<a href='../S/65.html#L52' title='Defined at 52 in kernel/chr_drv/tty_io.c.'>I_CRNL</a> (<a href='../S/7.html#L44' title='Defined at 44 in fs/char_dev.c.'>tty</a>))
<a name='L206'>          c = 10;
<a name='L207'>        <b>else</b> <b>if</b> (<a href='../S/65.html#L53' title='Defined at 53 in kernel/chr_drv/tty_io.c.'>I_NOCR</a> (<a href='../S/7.html#L44' title='Defined at 44 in fs/char_dev.c.'>tty</a>))
<a name='L208'>          <b>continue</b>;
<a name='L209'>        <b>else</b>;
<a name='L210'><i><font color='green'>// 如果该字符是换行符NL(10)并且换行转回车标志NLCR 置位,则将其转换为回车符CR(13)。</font></i>
<a name='L211'>      <b>else</b> <b>if</b> (c == 10 &amp;&amp; <a href='../S/65.html#L51' title='Defined at 51 in kernel/chr_drv/tty_io.c.'>I_NLCR</a> (<a href='../S/7.html#L44' title='Defined at 44 in fs/char_dev.c.'>tty</a>))
<a name='L212'>        c = 13;
<a name='L213'><i><font color='green'>// 如果大写转小写标志UCLC 置位,则将该字符转换为小写字符。</font></i>
<a name='L214'>      <b>if</b> (<a href='../S/65.html#L50' title='Defined at 50 in kernel/chr_drv/tty_io.c.'>I_UCLC</a> (<a href='../S/7.html#L44' title='Defined at 44 in fs/char_dev.c.'>tty</a>))
<a name='L215'>        c = <a href='../S/27.html#L32' title='Defined at 32 in include/ctype.h.'>tolower</a> (c);
<a name='L216'><i><font color='green'>// 如果本地模式标志集中规范(熟)模式标志CANON 置位,则进行以下处理。</font></i>
<a name='L217'>      <b>if</b> (<a href='../S/65.html#L41' title='Defined at 41 in kernel/chr_drv/tty_io.c.'>L_CANON</a> (<a href='../S/7.html#L44' title='Defined at 44 in fs/char_dev.c.'>tty</a>))
<a name='L218'>        <font color='red'>{</font>
<a name='L219'><i><font color='green'>// 如果该字符是键盘终止控制字符KILL(^U),则进行删除输入行处理。</font></i>
<a name='L220'>          <b>if</b> (c == <a href='../S/38.html#L59' title='Defined at 59 in include/linux/tty.h.'>KILL_CHAR</a> (<a href='../S/7.html#L44' title='Defined at 44 in fs/char_dev.c.'>tty</a>))
<a name='L221'>            <font color='red'>{</font>
<a name='L222'><i><font color='green'>/* deal with killing the input line */</font></i><i><font color='green'>/* 删除输入行处理 */</font></i>
<a name='L223'><i><font color='green'>// 如果tty 辅助队列不空,或者辅助队列中最后一个字符是换行NL(10),或者该字符是文件结束字符</font></i>
<a name='L224'><i><font color='green'>// (^D),则循环执行下列代码。</font></i>
<a name='L225'>              <b>while</b> (!(<a href='../S/38.html#L39' title='Defined at 39 in include/linux/tty.h.'>EMPTY</a> (<a href='../S/7.html#L44' title='Defined at 44 in fs/char_dev.c.'>tty</a>-&gt;secondary) ||
<a name='L226'>                       (c = <a href='../S/38.html#L43' title='Defined at 43 in include/linux/tty.h.'>LAST</a> (<a href='../S/7.html#L44' title='Defined at 44 in fs/char_dev.c.'>tty</a>-&gt;secondary)) == 10 ||
<a name='L227'>                       c == <a href='../S/38.html#L60' title='Defined at 60 in include/linux/tty.h.'>EOF_CHAR</a> (<a href='../S/7.html#L44' title='Defined at 44 in fs/char_dev.c.'>tty</a>)))
<a name='L228'>                <font color='red'>{</font>
<a name='L229'><i><font color='green'>// 如果本地回显标志ECHO 置位,那么:若字符是控制字符(值&lt;32),则往tty 的写队列中放入擦除</font></i>
<a name='L230'><i><font color='green'>// 字符ERASE。再放入一个擦除字符ERASE,并且调用该tty 的写函数。</font></i>
<a name='L231'>                  <b>if</b> (<a href='../S/65.html#L43' title='Defined at 43 in kernel/chr_drv/tty_io.c.'>L_ECHO</a> (<a href='../S/7.html#L44' title='Defined at 44 in fs/char_dev.c.'>tty</a>))
<a name='L232'>                    <font color='red'>{</font>
<a name='L233'>                      <b>if</b> (c &lt; 32)
<a name='L234'>                        <a href='../S/38.html#L52' title='Defined at 52 in include/linux/tty.h.'>PUTCH</a> (127, <a href='../S/7.html#L44' title='Defined at 44 in fs/char_dev.c.'>tty</a>-&gt;write_q);
<a name='L235'>                      <a href='../S/38.html#L52' title='Defined at 52 in include/linux/tty.h.'>PUTCH</a> (127, <a href='../S/7.html#L44' title='Defined at 44 in fs/char_dev.c.'>tty</a>-&gt;write_q);
<a name='L236'>                      <a href='../S/7.html#L44' title='Defined at 44 in fs/char_dev.c.'>tty</a>-&gt;write (<a href='../S/7.html#L44' title='Defined at 44 in fs/char_dev.c.'>tty</a>);
<a name='L237'>                    <font color='red'>}</font>
<a name='L238'><i><font color='green'>// 将tty 辅助队列头指针后退1 字节。</font></i>
<a name='L239'>                  <a href='../S/38.html#L37' title='Defined at 37 in include/linux/tty.h.'>DEC</a> (<a href='../S/7.html#L44' title='Defined at 44 in fs/char_dev.c.'>tty</a>-&gt;secondary.head);
<a name='L240'>                <font color='red'>}</font>
<a name='L241'>              <b>continue</b>;         <i><font color='green'>// 继续读取并处理其它字符。</font></i>
<a name='L242'>            <font color='red'>}</font>
<a name='L243'><i><font color='green'>// 如果该字符是删除控制字符ERASE(^H),那么:</font></i>
<a name='L244'>          <b>if</b> (c == <a href='../S/38.html#L58' title='Defined at 58 in include/linux/tty.h.'>ERASE_CHAR</a> (<a href='../S/7.html#L44' title='Defined at 44 in fs/char_dev.c.'>tty</a>))
<a name='L245'>            <font color='red'>{</font>
<a name='L246'><i><font color='green'>// 若tty 的辅助队列为空,或者其最后一个字符是换行符NL(10),或者是文件结束符,继续处理</font></i>
<a name='L247'><i><font color='green'>// 其它字符。</font></i>
<a name='L248'>              <b>if</b> (<a href='../S/38.html#L39' title='Defined at 39 in include/linux/tty.h.'>EMPTY</a> (<a href='../S/7.html#L44' title='Defined at 44 in fs/char_dev.c.'>tty</a>-&gt;secondary) ||
<a name='L249'>                  (c = <a href='../S/38.html#L43' title='Defined at 43 in include/linux/tty.h.'>LAST</a> (<a href='../S/7.html#L44' title='Defined at 44 in fs/char_dev.c.'>tty</a>-&gt;secondary)) == 10 || c == <a href='../S/38.html#L60' title='Defined at 60 in include/linux/tty.h.'>EOF_CHAR</a> (<a href='../S/7.html#L44' title='Defined at 44 in fs/char_dev.c.'>tty</a>))
<a name='L250'>                <b>continue</b>;
<a name='L251'><i><font color='green'>// 如果本地回显标志ECHO 置位,那么:若字符是控制字符(值&lt;32),则往tty 的写队列中放入擦除</font></i>
<a name='L252'><i><font color='green'>// 字符ERASE。再放入一个擦除字符ERASE,并且调用该tty 的写函数。</font></i>
<a name='L253'>              <b>if</b> (<a href='../S/65.html#L43' title='Defined at 43 in kernel/chr_drv/tty_io.c.'>L_ECHO</a> (<a href='../S/7.html#L44' title='Defined at 44 in fs/char_dev.c.'>tty</a>))
<a name='L254'>                <font color='red'>{</font>
<a name='L255'>                  <b>if</b> (c &lt; 32)
<a name='L256'>                    <a href='../S/38.html#L52' title='Defined at 52 in include/linux/tty.h.'>PUTCH</a> (127, <a href='../S/7.html#L44' title='Defined at 44 in fs/char_dev.c.'>tty</a>-&gt;write_q);
<a name='L257'>                  <a href='../S/38.html#L52' title='Defined at 52 in include/linux/tty.h.'>PUTCH</a> (127, <a href='../S/7.html#L44' title='Defined at 44 in fs/char_dev.c.'>tty</a>-&gt;write_q);
<a name='L258'>                  <a href='../S/7.html#L44' title='Defined at 44 in fs/char_dev.c.'>tty</a>-&gt;write (<a href='../S/7.html#L44' title='Defined at 44 in fs/char_dev.c.'>tty</a>);
<a name='L259'>                <font color='red'>}</font>
<a name='L260'><i><font color='green'>// 将tty 辅助队列头指针后退1 字节,继续处理其它字符。</font></i>
<a name='L261'>              <a href='../S/38.html#L37' title='Defined at 37 in include/linux/tty.h.'>DEC</a> (<a href='../S/7.html#L44' title='Defined at 44 in fs/char_dev.c.'>tty</a>-&gt;secondary.head);
<a name='L262'>              <b>continue</b>;
<a name='L263'>            <font color='red'>}</font>
<a name='L264'><i><font color='green'>//如果该字符是停止字符(^S),则置tty 停止标志,继续处理其它字符。</font></i>
<a name='L265'>          <b>if</b> (c == <a href='../S/38.html#L62' title='Defined at 62 in include/linux/tty.h.'>STOP_CHAR</a> (<a href='../S/7.html#L44' title='Defined at 44 in fs/char_dev.c.'>tty</a>))
<a name='L266'>            <font color='red'>{</font>
<a name='L267'>              <a href='../S/7.html#L44' title='Defined at 44 in fs/char_dev.c.'>tty</a>-&gt;stopped = 1;
<a name='L268'>              <b>continue</b>;
<a name='L269'>            <font color='red'>}</font>
<a name='L270'><i><font color='green'>// 如果该字符是停止字符(^Q),则复位tty 停止标志,继续处理其它字符。</font></i>
<a name='L271'>          <b>if</b> (c == <a href='../S/38.html#L61' title='Defined at 61 in include/linux/tty.h.'>START_CHAR</a> (<a href='../S/7.html#L44' title='Defined at 44 in fs/char_dev.c.'>tty</a>))
<a name='L272'>            <font color='red'>{</font>
<a name='L273'>              <a href='../S/7.html#L44' title='Defined at 44 in fs/char_dev.c.'>tty</a>-&gt;stopped = 0;
<a name='L274'>              <b>continue</b>;
<a name='L275'>            <font color='red'>}</font>
<a name='L276'>        <font color='red'>}</font>
<a name='L277'><i><font color='green'>// 若输入模式标志集中ISIG 标志置位,则在收到INTR、QUIT、SUSP 或DSUSP 字符时,需要为进程</font></i>
<a name='L278'><i><font color='green'>// 产生相应的信号。</font></i>
<a name='L279'>      <b>if</b> (<a href='../S/65.html#L42' title='Defined at 42 in kernel/chr_drv/tty_io.c.'>L_ISIG</a> (<a href='../S/7.html#L44' title='Defined at 44 in fs/char_dev.c.'>tty</a>))
<a name='L280'>        <font color='red'>{</font>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -